SQL:使用复合引用主键和外键创建表

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

所以我有下面的ER图:

因此,微妙是一种概括。这些东西要么是金属做的,要么是木头做的,它不可能只是一个小玩意儿。以下是创建代码:

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)
);
很好用