Database Dbs中的多重继承建模
我正在为一个有礼物的系统建模。这些礼物可以是你提供的礼物,也可以是你收到的礼物。此外,这些礼物可以是单个或多个,最后它们也可以是一种类型,如玩具、食物、旅行或其他 因此,我想到:Database Dbs中的多重继承建模,database,database-design,Database,Database Design,我正在为一个有礼物的系统建模。这些礼物可以是你提供的礼物,也可以是你收到的礼物。此外,这些礼物可以是单个或多个,最后它们也可以是一种类型,如玩具、食物、旅行或其他 因此,我想到: Presents --> Toys --> Offer --> Single | | --> Multiple | --> Receive --> Single |
Presents --> Toys --> Offer --> Single
| | --> Multiple
| --> Receive --> Single
| --> Multiple
--> Food --> Offer --> Single
| | --> Multiple
| --> Receive --> ...
--> Trip --> ..
--> Other --> ..
我发现这是我的系统的唯一解决方案。所有的“leafs”将在不同的表中实现,这是因为所有的“leafs”可以有不同的模型,有时它会是一个以上的属性。有时会更糟。因此,它是一个三重继承,其中当前类的模型在属性上取决于三个因素
问题是,如果你知道我的意思,我发现这个解决方案非常难看。这就是为什么我想问你们对这件事的看法
提前谢谢。
琼不知道更多,我只能推测,但做出一些假设:
这仍然有点令人不快,因为这个事实表可能需要额外的列,因为需要新种类的东西,但是添加可为null的列是一件非常安全的事情。这里有一个非常类似的问题 如果您使用的是PostgreSQL,则允许多重继承
CREATE TABLE presents
(
gift_id INT,
PRIMARY KEY(gift_id)
);
CREATE TABLE offer_receiver
(
is_offer BOOLEAN,
PRIMARY KEY(is_offer)
);
CREATE TABLE present_quantity
(
qty_received INT,
PRIMARY KEY(qty_received)
);
CREATE TABLE present_info
(
person_id INT,
PRIMARY KEY(person_id)
) INHERITS(present, offer_receiver, present_quantity);
本文很好地解释了何时以及如何使用继承:
尽管如此,重新考虑这个设计可能是个好主意。这看起来更像一个对象层次结构,而不是ER模型。请记住,在程序中建模数据可能是父级->子级,但在数据库中建模数据可能是反向的。提供和接收意味着什么?为什么它很重要?
CREATE TABLE presents
(
gift_id INT,
PRIMARY KEY(gift_id)
);
CREATE TABLE offer_receiver
(
is_offer BOOLEAN,
PRIMARY KEY(is_offer)
);
CREATE TABLE present_quantity
(
qty_received INT,
PRIMARY KEY(qty_received)
);
CREATE TABLE present_info
(
person_id INT,
PRIMARY KEY(person_id)
) INHERITS(present, offer_receiver, present_quantity);