对于我的学校项目,我需要创建一个数据库。这是我的ERD。
在SQL中我创建了Category表:
CREATE table "Category" (
"Id" NUMBER(5) NOT NULL,
"SubCategoryId" NUMBER(5) NULL,
"Name" VARCHAR2(32) NOT NULL,
CONSTRAINT "Category_pk" PRIMARY KEY ("Id")
);
ALTER TABLE "Category" ADD CONSTRAINT "Category_fk" FOREIGN KEY ("SubCategoryId") REFERENCES "Category" ("Id");
产品表
CREATE table "Product" (
"Id" NUMBER(5) NOT NULL,
"CategoryId" NUMBER(5) NOT NULL, /* Category.Id or Category.SubCategoryId */
"Name" VARCHAR2(32) NOT NULL,
"Brand" VARCHAR2(32),
"Type" VARCHAR2(32),
"Year" NUMBER(4),
CONSTRAINT "Product_pk" PRIMARY KEY ("Id")
);
product表在Category.Id上有一个CategoryId(外键),但Product.CategoryId在Category.SubCategoryId上也需要一个外键。
这是可能的,还是应该创建一个名为" SubCategory"的额外表格。然后将外键添加到Category.Id和SubCategory.Id?
答案 0 :(得分:1)
外键引用属于 Category 表,而不属于任何其他表。从E-R图中可以清楚地看出这一点。你甚至圈出了相应的链接。
我会更像这样写出定义:
CREATE table Category (
CategoryId NUMBER(5) NOT NULL,
SubCategoryId NUMBER(5) NULL,
Name VARCHAR2(32) NOT NULL,
CONSTRAINT Category_pk PRIMARY KEY (CategoryId),
CONSTRAINT fk_Category_SubCategory FOREIGN KEY (SubCategoryId) REFERENCES Category(CategoryId)
);
注意:
primary key
和references
。