数据库架构的方面

时间:2015-03-07 20:54:51

标签: database database-design architecture

例如,我有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个实体之间,每个实体都有唯一字段的套件。

问题 - 创建关系数据库架构的最佳方法是什么?我看到了两种方法:

  1. 一个常见的表格提供。
  2. 专业人士:

      

    a)易于开发

         

    b)明确并理解与空缺表的关系

    缺点:

      

    a)即使不是,也会将某些字段标记为可为空   用例可以为空。即想象一下FirstContactDate和   LastContactDate对于AcceptOffers和不可为空   OutstandingOffers。但我们必须将其标记为可以存储的可空存   DeclineOffers。所以,我们必须编写规则来检查AcceptOffer(和   DeclineOffers)已无法使用FirstContactDate和LastContactDate。

         

    b)许多字段仅对一种类型的实体是唯一的,但是存在   所有类型

    1. 三个表(每种实体一个表)
    2. 的优点:

        

      a)更清晰,更充足"体系结构

      缺点:

        

      a)在Vacancy之间建立关系的更复杂的架构   以及这3个表中的每一个。我甚至无法想象如何在没有它的情况下做到这一点   还有一个表和该表的附加规则

      哪种方法更合适?为什么?

1 个答案:

答案 0 :(得分:1)

这取决于您如何估计模型与时间的推移程度。

如果你期望它们太不同,我会说 - 创建单独的表格。如果你希望他们分享很多 - 去一张桌子。

这种情况没有拇指规则:)

这也取决于您使用的ORM。它可能会发生,它不支持表继承,你将被迫创建三个完全不同的模型。

此外,必须考虑性能。当你有太多带有索引的字段时,除了选择之外,这会减慢所有操作的速度。因此,您可能希望在这些字段上创建功能索引以避免瓶颈。