例如,我有3种类型的某个实体,让我们将其命名为Offer。所以,可以是AcceptOffer,DeclineOffer和OutstandingOffer。
AcceptOffer:
- UserID
- ContactID
- Notes
- FirstContactDate
- LastContactDate
[... and 5-10 the unique fields...]
DeclineOffer:
- UserID
- ContactID
- Notes
[... and 5-10 the unique fields...]
OutstandingOffer:
- UserID
- ContactID
- FirstContactDate
- LastContactDate
[... and 5-10 the unique fields...]
另外,想象一下,我们有一个名为Vacancy的表格表,它有一个字段OfferID和与商品的关系
空缺表:
- ID
- VacancyName
- OfferID
因此,这些实体有一些共同的字段(在所有3个实体中),一些公共字段仅在2个实体之间,每个实体都有唯一字段的套件。
问题 - 创建关系数据库架构的最佳方法是什么?我看到了两种方法:
专业人士:
缺点:a)易于开发
b)明确并理解与空缺表的关系
a)即使不是,也会将某些字段标记为可为空 用例可以为空。即想象一下FirstContactDate和 LastContactDate对于AcceptOffers和不可为空 OutstandingOffers。但我们必须将其标记为可以存储的可空存 DeclineOffers。所以,我们必须编写规则来检查AcceptOffer(和 DeclineOffers)已无法使用FirstContactDate和LastContactDate。
b)许多字段仅对一种类型的实体是唯一的,但是存在 所有类型
的优点:
a)更清晰,更充足"体系结构
缺点:
a)在Vacancy之间建立关系的更复杂的架构 以及这3个表中的每一个。我甚至无法想象如何在没有它的情况下做到这一点 还有一个表和该表的附加规则
哪种方法更合适?为什么?
答案 0 :(得分:1)
这取决于您如何估计模型与时间的推移程度。
如果你期望它们太不同,我会说 - 创建单独的表格。如果你希望他们分享很多 - 去一张桌子。
这种情况没有拇指规则:)
这也取决于您使用的ORM。它可能会发生,它不支持表继承,你将被迫创建三个完全不同的模型。
此外,必须考虑性能。当你有太多带有索引的字段时,除了选择之外,这会减慢所有操作的速度。因此,您可能希望在这些字段上创建功能索引以避免瓶颈。