关系设计 - 将多个表合并到一个外键列中?

tgx*_*iii 6 database-design relational-theory

拿一张跟踪肉类购买的表格。它有一个“meat_id”外键列来指示购买的肉的类型。

但是,不同类型的肉在某些方面是独一无二的(例如美国农业部的分级),所以我认为它们应该存储在不同的表中。

我目前没有足够的代表来发布我绘制的 ERD,但我希望这些 DDL 足够了(为了简洁起见,我已经简化了它们):

CREATE TABLE meat_purchase
(
    id                  INTEGER
  , purchase_details    VARCHAR(4000) -- actually multiple columns, but details are irrelevant
  , meat_id             INTEGER
);

CREATE TABLE beef_meats
(
    id                  INTEGER
  , usda_beef_grade_id  INTEGER
        FOREIGN KEY REFERENCES usda_beef_grades
  , desc    VARCHAR(4000)
);

CREATE TABLE pork_meats
(
    id      INTEGER
  , desc    VARCHAR(4000)
);

CREATE TABLE poultry_meats
(
    id      INTEGER
  , bird_id
        FOREIGN KEY REFERENCES birds
  , desc    VARCHAR(4000)
);

-- and so on for the different types of meat...
Run Code Online (Sandbox Code Playgroud)

我想知道如何将“meat_purchases”表与肉类表相关联。

请仅提供标准 SQL 和 RDBMS 不可知答案。

小智 4

我认为您正在寻找子类型/超类型构造。肉类将是您的迁移键,并且包含一个类型字段,指示它与哪种肉类子类型相关。所以:

购买肉类=肉类={肉牛肉,肉猪肉,肉家禽}

其中 Meat 是类型和子类型的键。

在鱼尾纹表示法中,这是一个下方有一条线的圆圈。