SQL数据实体实体关联

SQL数据实体实体关联,sql,database,database-design,Sql,Database,Database Design,我有大约8个实体,它们都与一个公共实体有一对一的关系 客户端没有从预定义数据中进行选择,因此无需应用FK作为约束 所讨论的主表是calla finish表,它包含从客户端发送到服务器的四种未知十六进制颜色 例如,构建门时,门的不同部分及其外部部分的颜色都可以有不同的颜色。因此,所有这些有问题的表,它们的数据总是来自客户机的最新数据,而不是从下拉列表中选择的,或者是从其他一些预定义的数据中选择的,我会让客户机从中进行选择 我的问题是,将这个finish实体与其他需要表达其finish的实体关联的最

我有大约8个实体,它们都与一个公共实体有一对一的关系

客户端没有从预定义数据中进行选择,因此无需应用FK作为约束

所讨论的主表是calla finish表,它包含从客户端发送到服务器的四种未知十六进制颜色

例如,构建门时,门的不同部分及其外部部分的颜色都可以有不同的颜色。因此,所有这些有问题的表,它们的数据总是来自客户机的最新数据,而不是从下拉列表中选择的,或者是从其他一些预定义的数据中选择的,我会让客户机从中进行选择

我的问题是,将这个finish实体与其他需要表达其finish的实体关联的最佳方式是什么

我正在添加一个我正在处理的图表的屏幕截图,这些并不是所有的实体,只是目前正在讨论的实体,这些实体将有助于向其他人阐明我需要的解决方案

我还包括一些脚本以及

    /****** Object:  Table [dbo].[Finish]    Script Date: 06/22/2012 15:08:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Finish](
    [ID] [int] NOT NULL,
    [Left] [varchar](30) NULL,
    [Right] [varchar](30) NULL,
    [Top] [varchar](30) NULL,
    [Bottom] [varchar](30) NULL,
    [Note] [varchar](150) NULL,
 CONSTRAINT [PK_Finish] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Horizontal]    Script Date: 06/22/2012 15:08:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Horizontal](
    [ID] [int] IDENTITY(11,1) NOT NULL,
    [Name] [varchar](15) NOT NULL,
    [Floor] [smallint] NOT NULL,
    [SizeID] [int] NOT NULL,
    [GlassPocket] [decimal](5, 3) NULL,
    [IsFiller] [bit] NOT NULL,
    [Note] [varchar](150) NULL,
 CONSTRAINT [PK_Horizontal] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Door]    Script Date: 06/22/2012 15:08:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Door](
    [ID] [int] IDENTITY(421,1) NOT NULL,
    [BayID] [int] NOT NULL,
    [Position] [tinyint] NOT NULL,
    [HasJamb] [bit] NOT NULL,
    [HasThreshold] [bit] NOT NULL,
    [IsAutoShowroom] [bit] NOT NULL,
    [IsSingle] [bit] NOT NULL,
    [Type] [varchar](10) NOT NULL,
    [SizeID] [int] NOT NULL,
    [Note] [varchar](150) NULL,
 CONSTRAINT [PK_Door] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Leaf]    Script Date: 06/22/2012 15:08:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Leaf](
    [ID] [int] IDENTITY(21,1) NOT NULL,
    [DoorID] [int] NOT NULL,
    [Position] [tinyint] NOT NULL,
    [Stile] [varchar](10) NOT NULL,
    [Bottomrail] [decimal](5, 3) NOT NULL,
    [Hand] [varchar](5) NOT NULL,
    [IsActive] [bit] NOT NULL,
    [Swing] [varchar](5) NOT NULL,
    [SizeID] [int] NOT NULL,
    [Note] [varchar](150) NULL,
 CONSTRAINT [PK_Leaf] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[Bay]    Script Date: 06/22/2012 15:08:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Bay](
    [ID] [int] IDENTITY(1213,1) NOT NULL,
    [ElevationID] [int] NOT NULL,
    [Position] [tinyint] NOT NULL,
    [SizeID] [int] NOT NULL,
    [Note] [varchar](150) NULL,
 CONSTRAINT [PK_Bay] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
下面的每个实体都需要与finish表关联。每个实体新记录只有一个完成关系。 是否有可能将这些关联起来,并且仍然能够在删除时进行级联,而不存在循环引用问题

是的,这是可能的

您应该在每个与Finish实体有关系的表中添加一个引用来完成该实体

您将使用与引用的_表_名称和id相同的数据类型(通常也是相同的)定义列。在我们的商店中,列_名称将是[finish_id]。(我在这里看到您使用的是CamelCase样式。)

无论如何,我建议您将其定义为外键

您说没有必要,但从您描述的情况来看,这正是需要外键约束的情况

您需要决定更新或删除finish表中的id时的操作。(是否要禁止更新或删除?是否要保留现有关系?)我希望您希望默认的删除限制。您可以允许更新,并保留与更新级联的关系。)


我认为循环引用没有任何潜在问题,只要finish表是父表(所有其他表都引用它,finish表没有任何对其他表的引用。)

您能解释一下级联删除的要求吗?你预计哪些记录会被删除,哪些(相关)记录会被自动删除?这正是我想要的。谢谢你的“这就是我们正在做的信息”。当我开始设计一个数据库时,我总是问很多问题,这些问题很难撤销……)至于on delete,我的方法是不可能删除孩子的完成。所以,您要说的是,将FK放置到实体中,作为finish表中的door表。删除门时,抓取finishID并删除完成记录。。谢谢你的帮助。