Sql 使用具有不同标题的表中的两个主键属性
我得到了带有函数{PK}的表“Functions”,我想要另一个带有层次结构{PK}的表“Hierarchy”,它定义了函数的树结构,所以我需要函数表中的一个函数{ID作为父函数}和一个函数{ID作为子函数。我的问题是如何使用另一个表中的两个主键将其作为外键组合在一起 我正在使用SQL Server 2012和Management StudioSql 使用具有不同标题的表中的两个主键属性,sql,sql-server,sql-server-2012,ssms,Sql,Sql Server,Sql Server 2012,Ssms,我得到了带有函数{PK}的表“Functions”,我想要另一个带有层次结构{PK}的表“Hierarchy”,它定义了函数的树结构,所以我需要函数表中的一个函数{ID作为父函数}和一个函数{ID作为子函数。我的问题是如何使用另一个表中的两个主键将其作为外键组合在一起 我正在使用SQL Server 2012和Management Studio 非常感谢实际上,您只需要在函数表中添加一个ParentFunction\u ID列。 如果您的结构确实是一棵树,则不需要另一个表。 然后将ParentF
非常感谢实际上,您只需要在函数表中添加一个ParentFunction\u ID列。
如果您的结构确实是一棵树,则不需要另一个表。
然后将ParentFunction\u ID设置为同一表函数的FK。
所以ParentFunction_ID(FK)将指向Function_ID(PK)。
ParentFunction\u ID为NULL的唯一记录是树的根。
以下是一些示例代码:
USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Functions](
[Function_ID] [int] IDENTITY(1,1) NOT NULL,
[FunctionCode] [varchar](max) NULL,
[ParentFunction_ID] [int] NULL,
CONSTRAINT [PK_Functions] PRIMARY KEY CLUSTERED
(
[Function_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
ALTER TABLE [dbo].[Functions] WITH CHECK ADD CONSTRAINT [FK_Functions_Functions] FOREIGN KEY([ParentFunction_ID])
REFERENCES [dbo].[Functions] ([Function_ID])
GO
ALTER TABLE [dbo].[Functions] CHECK CONSTRAINT [FK_Functions_Functions]
GO
将您的函数命名为表a函数表。使用AFAIK
表名的复数形式并不是一种很好的做法。
所以你可以这样做
--- 1 ---
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Function](
[Function_ID] [int] IDENTITY(1,1) NOT NULL,
[FunctionCode] [varchar](max) NULL,
CONSTRAINT [PK_Function] PRIMARY KEY CLUSTERED
(
[Function_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
--- 2 ---
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Hierarchy](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ParentFunction_ID] [int] NULL,
[ChildFunction_ID] [int] NULL,
CONSTRAINT [PK_Hierarchy] 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
ALTER TABLE [dbo].[Hierarchy] WITH CHECK ADD CONSTRAINT [FK_Hierarchy_Function] FOREIGN KEY([ParentFunction_ID])
REFERENCES [dbo].[Function] ([Function_ID])
GO
ALTER TABLE [dbo].[Hierarchy] CHECK CONSTRAINT [FK_Hierarchy_Function]
GO
ALTER TABLE [dbo].[Hierarchy] WITH CHECK ADD CONSTRAINT [FK_Hierarchy_Function1] FOREIGN KEY([ChildFunction_ID])
REFERENCES [dbo].[Function] ([Function_ID])
GO
ALTER TABLE [dbo].[Hierarchy] CHECK CONSTRAINT [FK_Hierarchy_Function1]
GO
我之所以有单独的表,是因为对于一个函数,我可能有多个组合sok,添加了另一个答案,该答案基于您最近的输入,即这不是真正的树。