【问题标题】:How to CREATE TABLE with disjoint relationship in SQL如何在 SQL 中创建具有不相交关系的表
【发布时间】:2014-12-10 18:34:12
【问题描述】:

我正在尝试使用disjoint subtype relationship 创建一个表。

例如,如果 Supertype 是家具,而我有 3 个 Subtypes 家具:椅子、沙发和桌子。

然后:

CREATE TABLE Furniture
(order_num NUMBER(15), desc VARCHAR2(20), type VARCHAR2(10));

如何选择椅子、沙发或桌子的类型?

【问题讨论】:

标签: sql oracle relationships


【解决方案1】:

您可以在 CREATE TABLE 中使用 REFERENCES。

CREATE TABLE Furniture_SubTypes
(
    sub_type     VARCHAR(10) PRIMARY KEY
);

INSERT INTO Furniture_SubTypes VALUES ('Chair');
INSERT INTO Furniture_SubTypes VALUES ('Couch');
INSERT INTO Furniture_SubTypes VALUES ('Table');

CREATE TABLE Furniture
(
    order_num    NUMBER,
    description  VARCHAR(20),
    sub_type     REFERENCES Furniture_SubTypes(sub_type)
);

【讨论】:

    【解决方案2】:

    使用check 约束:

    CREATE TABLE Furniture (
        order_num NUMBER(15),
        description VARCHAR2(20),
        type VARCHAR2(10),
        check (type in ('chair', 'couch', 'table'))
    );
    

    请注意,desc 不适合作为列名,因为它是 SQL 中的关键字(用于 order by)。

    【讨论】:

    • 最后一个问题。每种类型的家具都有自己的属性。例如椅子有腿、颜色的属性。沙发具有织物的属性。等等。我会为每种类型的家具创建单独的桌子吗?
    • 这是一个非常不同的问题。在某些情况下是,在某些情况下不是。如果您想要更详细的答案,您应该提出另一个问题,提供有关属性以及如何使用表格的更多信息。
    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多