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 是类型和子类型的键。
在鱼尾纹表示法中,这是一个下方有一条线的圆圈。