2

我从来没有在我的数据库中真正使用过外键,我一直只是编写可以为我执行任务的代码,但我希望将一些逻辑转移到数据库中并更多地了解外键。

我目前有一个包含表的数据库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 时,哪个是主列,在这种情况下哪个是外部列?

4

1 回答 1

7

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

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

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

于 2013-07-26T22:27:54.840 回答