如何在同一数据表中关联外键与主键?附ERD及尝试代码
修正自引用分类表的SQL语句
嘿,我来帮你搞定这个自引用分类表的问题~你要实现的是树形结构的分类(父分类关联子分类),你的SQL代码存在语法小错误,我帮你修正并解释关键点:
正确的SQL代码
CREATE TABLE Category( CategoryID UNIQUEIDENTIFIER CONSTRAINT cat_cid_pk PRIMARY KEY DEFAULT NEWID(), CategoryName VARCHAR(100) CONSTRAINT cat_can_nn NOT NULL, ParentCategoryID UNIQUEIDENTIFIER CONSTRAINT cat_pcid_fk REFERENCES SWD6_1B.[Category]([CategoryID]) );
关键修正与说明
- 语法错误修复:你原来的代码末尾把分号和闭合括号的顺序搞反了,应该先完成外键约束的定义,再用
);结束整个CREATE TABLE语句。 - 自引用外键的合法性:SQL Server允许在创建表时直接引用自身的主键,只要主键已经在表中定义(你这里先定义了
CategoryID主键,所以完全没问题)。 - 父分类字段的NULL值:顶级分类没有父分类,所以
ParentCategoryID需要允许为NULL(你的代码没加NOT NULL,这点是正确的,不用修改),这样就能正常存储根节点分类了。 - 可选的额外约束:如果你的业务要求分类不能成为自己的父分类,可以添加一个CHECK约束:
把它加在CHECK (ParentCategoryID != CategoryID)ParentCategoryID字段的约束列表里即可。
内容的提问来源于stack exchange,提问作者Alastair
相关产品推荐
相关产品推荐

