拿一张跟踪肉类购买情况的表格。它有一个“meat_id”外键列来指示购买的是什么类型的肉。
但是,不同类型的肉在某些方面是独一无二的(例如 USDA 分级),所以我认为它们应该存储在不同的表中。
我目前没有足够的代表来发布我提取的 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...
我想知道如何将“meat_purchases”表与肉类表联系起来。
请仅提供与标准 SQL 和 RDBMS 无关的答案。
我认为您正在寻找子类型/超类型构造。Meat 将是您的迁移键,并且将包含一个 Type 字段,指示它与哪个子类型的肉相关。所以:
PurchaseMeat = Meat = {MeatBeef, MeatPork, MeatPoultry}
其中 Meat 是子类型的类型和键。
在 Crow's feet 符号中,这是一个圆圈,下面有一条线。
我不会为不同种类的肉类创建其他表格。我会创建肉类类型和切割类型,然后使用 FK 将它们捆绑在一起。下面的示例数据库:
课程用马
您正在尝试使用完全不同的运营解决方案加入电子商务解决方案。您需要做的是将电子商务视为一个单独的有界上下文,也就是一个部门,因此它有一个单独的数据库。
部门:销售
部门:肉类生产
在这种情况下,sales.order 具有 sales.order_lines 具有 sales.products,并且产品具有描述肉制品的描述字段
如果您需要 PRODUCTION 的肉类详细信息,那么它们将作为 product.specifications 发送到您的销售数据库