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);

実話: (数年前) Microsoft での就職の面接で、SQL Server の担当者が、これは不可能だと言いました。

于 2013-07-26T22:27:54.840 に答える