SQL:使用复合引用主键和外键创建表
所以我有下面的ER图: 因此,微妙是一种概括。这些东西要么是金属做的,要么是木头做的,它不可能只是一个小玩意儿。以下是创建代码:SQL:使用复合引用主键和外键创建表,sql,foreign-keys,primary-key,entity-relationship,create-table,Sql,Foreign Keys,Primary Key,Entity Relationship,Create Table,所以我有下面的ER图: 因此,微妙是一种概括。这些东西要么是金属做的,要么是木头做的,它不可能只是一个小玩意儿。以下是创建代码: CREATE TABLE Thing ( ThingID INTEGER PRIMARY KEY NOT NULL ); CREATE TABLE Subthing ( consists_of INTEGER REFERENCES Thing(ThingID), SubthingID INTEGER NOT NULL, PRIMAR
CREATE TABLE Thing (
ThingID INTEGER PRIMARY KEY NOT NULL
);
CREATE TABLE Subthing (
consists_of INTEGER REFERENCES Thing(ThingID),
SubthingID INTEGER NOT NULL,
PRIMARY KEY (SubthingID, consists_of)
);
CREATE TABLE Wood (
Wstuff VARCHAR(40) NOT NULL,
consists_of INTEGER NOT NULL,
SubthingID INTEGER NOT NULL,
FOREIGN KEY (SubthingID, consists_of) REFERENCES Subthing(SubthingID, consists_of),
PRIMARY KEY (SubthingID, consists_of)
);
CREATE TABLE Dust (
DustID INTEGER PRIMARY KEY NOT NULL
);
CREATE TABLE Metal (
Mstuff VARCHAR(40) NOT NULL,
consists_of INTEGER NOT NULL,
SubthingID INTEGER NOT NULL,
requires INTEGER NOT NULL REFERENCES Dust(DustID),
FOREIGN KEY (SubthingID, consists_of) REFERENCES Subthing(SubthingID, consists_of),
PRIMARY KEY (SubthingID, consists_of)
);
我想让Metal同时拥有一个主键(SubthingID,由组成)和一个外键(requires,引用DustID)。我不能在事后将其声明为外键,因为(SubthingID,composes_of)已经是外键。
你怎么能解决这个问题,除了把需求做成表格?没关系,我太蠢了
CREATE TABLE Metal (
Mstuff VARCHAR(40) NOT NULL,
consists_of INTEGER NOT NULL,
SubthingID INTEGER NOT NULL,
requires INTEGER NOT NULL,
FOREIGN KEY (requires) REFERENCES Dust(DustID),
FOREIGN KEY (SubthingID, consists_of) REFERENCES Subthing(SubthingID, consists_of),
PRIMARY KEY (SubthingID, consists_of)
);
很好用