SQL中的关系在同一个表上

时间:2013-07-26 22:25:19

标签: sql sql-server tsql

我从来没有真正在我的数据库中使用过外键,我总是只编写能够为我强制执行的代码,但我希望将一些逻辑转移到数据库并学习更多有关外键的知识。

我目前有一个包含表格Categories的数据库:

CREATE TABLE [dbo].[Categories](
    [CategoryID] [bigint] IDENTITY(1,1) NOT NULL,
    [ParentCategoryID] [bigint] NOT NULL,
    [CategoryStatus] [bit] NOT NULL,
    [CategoryTitle] [varchar](64) NOT NULL,
    [CategorySlug] [varchar](64) NOT NULL,
    [CategoryThumbnail] [varchar](128) NULL,
    [CategoryHeaderImage] [varchar](128) NULL,
    [CategoryDescription] [text] NULL,
 CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED 
(
    [CategoryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [UI_Categories_Slug] UNIQUE NONCLUSTERED 
(
    [CategorySlug] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

我想创建一个将ParentCategoryIDCategoryID关联起来的外键。创建FK时,哪个是主列,哪个是本例中的外来列?

1 个答案:

答案 0 :(得分:6)

我认为ParentCategoryID必须NULL能够(除非您希望顶级家长指向自己,这没有多大意义)。

ALTER TABLE dbo.Categories
  ADD CONSTRAINT FK_SelfParent
  FOREIGN KEY (ParentCategoryID)
  REFERENCES dbo.Categories(CategoryID);

真实的故事:在微软(几年前)的一次面试中,一位SQL Server人告诉我这是不可能的。