Oracle 为了将来的灵活性,我应该使用关联表建模吗?

Oracle 为了将来的灵活性,我应该使用关联表建模吗?,oracle,database-design,Oracle,Database Design,这是一个数据库建模问题 我通常使用标准的父子表设置对一对多进行建模,并且通常使用两个表之间的关联表对多对多进行建模。在这种情况下,当前需求需要一对多关系。但客户谈到了一些未来可能的需求,这将需要多对多关系 因此,这里有两个实施选项: 将数据库建模为一对多以满足当前需求。如果未来的需求需要多对多,那么我需要更改数据库结构和应用程序代码 对数据库进行多对多建模,并让应用程序代码将数据限制为一对多。如果未来的需求需要多对多,那么我只需要更改应用程序代码 在我们的应用程序中,事后更改数据库结构可能有点麻

这是一个数据库建模问题

我通常使用标准的父子表设置对一对多进行建模,并且通常使用两个表之间的关联表对多对多进行建模。在这种情况下,当前需求需要一对多关系。但客户谈到了一些未来可能的需求,这将需要多对多关系

因此,这里有两个实施选项:

  • 将数据库建模为一对多以满足当前需求。如果未来的需求需要多对多,那么我需要更改数据库结构和应用程序代码
  • 对数据库进行多对多建模,并让应用程序代码将数据限制为一对多。如果未来的需求需要多对多,那么我只需要更改应用程序代码
  • 在我们的应用程序中,事后更改数据库结构可能有点麻烦,但我可能会以灵活性的名义引入不必要的复杂性


    你会选择哪个选项?为什么?

    根据潜在需求设计软件是相当困难的。我会坚持实际要求。那样你就能按时完成

    而且,如果您对以后的多对多有实际需求,那么


    只是我的意见。。另一方面,我是按小时计酬的

    同意赛斯的观点。我们的情况与您相同,我们采用了多对多设计来存储一对多数据,而在未来的某个日期,我们需要存储多对多数据。随着时间的推移,它变成了(IMHO)一个可怕的混乱局面,因为事后看来是“个人的”多对多关系需求出现了,并且(出于一般合理的原因)实施了快速解决方案。现在,我们已经到了必须构建它的地步,我们不仅必须按照计划重构系统,还必须分解并解释所有临时的混乱情况。

    来自:

    Q:当存在多对多关系时,顾问希望使用联接表 在两张桌子之间。。。他们还希望使用完全相同的概念来表示1对多(父/子)关系。他们说,当使用当今的编程工具时,拥有第三个表有很多好处

    对我来说,似乎必须维护三个表及其索引,而不仅仅是 2,这是不必要的,并且增加了开销

    A:对于多对多,必须使用已知的关联表。这是 标准

    对于一对多的人来说,他们正在“吸一些有趣的东西”

    它不仅会受到你所描述的问题的影响,而且会使它变得更加困难 要保持这种1对多的关系,您还需要另外一个唯一索引 在关联表上,以强制执行“一”

    您在每个连接中也会产生额外的IO开销,包括:

    • 索引访问关联表的n IO
    • 1 IO读取关联表
    您可以在名义上为连接的每一行添加2-4个IO。没有理由

    在我的职业生涯中,我从未听说过有人将此作为标准操作程序
    生活这听起来真是个糟糕的主意。

    签证申请人的一个例子:签证发放部门接受许多申请人。如果申请人申请一种签证,他/她不能申请多种类型的签证

    这种关系是一对多(签证申请人)-签证表(签证类型)、申请人表(申请人id、签证类型)

    如果我们将规则更改为多对多,即申请人可以申请多种签证,我们有-签证表(与之前相同)、申请人表(申请人id)、申请人签证表(申请人id、签证id)

    因此,中断的级别是(如果/当该业务规则在将来发生更改时):必须将applicator.visa_type列迁移到applicator visa表中。公开此信息的网页也将被中断(即强制更改)。因此,数据库更改将伴随应用程序更改

    总之,我想知道在DB中构建抽象是否值得,如果这不能与应用程序代码齐头并进的话。也就是说,如果商业规则发生变化,我愿意在DB层和web层一起应对变化。 有人在DB级别查看多对多关系时,可能会错误地认为这样的功能目前已经实现。

    选项1

    • 接吻
    • 雅格尼

    在您做出设计选择之前,请与客户坐下来,询问他们对未来许多需求的重视程度。解释这将如何在以后更改数据模型以及成本,并查看他们是否希望现在使用多人模型

    请记住,您可以随时在以后更改模型,然后通过获取替换当前子表的子表(重命名)和关联表,并将它们放在名为“与当前子表类似”的视图中,确保内容不会中断。这样,您的代码更改就不会那么痛苦了