我从来没有真正在我的数据库中使用过外键,我总是只编写能够为我强制执行的代码,但我希望将一些逻辑转移到数据库并学习更多有关外键的知识。
我目前有一个包含表格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]
我想创建一个将ParentCategoryID
与CategoryID
关联起来的外键。创建FK时,哪个是主列,哪个是本例中的外来列?
答案 0 :(得分:6)
我认为ParentCategoryID
必须NULL
能够(除非您希望顶级家长指向自己,这没有多大意义)。
ALTER TABLE dbo.Categories
ADD CONSTRAINT FK_SelfParent
FOREIGN KEY (ParentCategoryID)
REFERENCES dbo.Categories(CategoryID);
真实的故事:在微软(几年前)的一次面试中,一位SQL Server人告诉我这是不可能的。