为从相同基类派生的对象设计数据表的最佳方法是什么

时间:2011-11-12 23:06:10

标签: database database-design

我正在尝试使用以下基本结构重新构建数据库 - 我有人,每个人都可以托管各种事件,每个季节都会分类为几个EventTypes。
我可以轻松地在此场景中创建数据库表,并在事件和事件类型之间建立关系。问题是每种不同类型的事件都有不同的属性集,我试图避免创建具有如此多字段的Events表,其中许多字段将为null或空白,具体取决于所选的EventType。 问题:我如何才能最好地设计数据层,以便我可以拥有一个名为Events的基类,并且各种EventTypes的对象都从该基类继承。
(我希望这不会令人困惑,请问,我会澄清,谢谢)

2 个答案:

答案 0 :(得分:1)

我建议您将常用的内容放在“事件”表中。对于特殊情况,请创建与相应字段匹配的其他表。

虽然在大多数情况下可以使用其他解决方案,例如多态关联等,但对于大多数人来说,添加更多的表和列并将它们称为它们更为简单。尽管表格数量增加,但这有助于实地验证的一个例子。

如果所有列都相同,那么是event_type,但如果有这么多列则不同,那么没有。

尝试使一切真正通用或编号列(yuch)都不是好选择。当您为此类命名表和列时,关系数据库的效果最好(易读性和可维护性)。

还有一些非架构的非SQL选项,并支持这种多样性。它们是noSQL实现,如mongoDB,Hadoop,CouchDB等。

答案 1 :(得分:1)

执行此操作的一种方法是使用基本属性和EventType列创建事件表,并为每种不同的事件类型创建不同的表。 “base”表中的EventType列将告诉您需要加入哪个表以获取事件的其余属性。在DAL中,您可以使用工厂模式通过使用基本事件类的EventType属性来获取正确的Event子类。