【问题标题】:Are tables with the same attributes but different relationships bad practice?具有相同属性但关系不同的表是不好的做法吗?
【发布时间】:2016-01-09 01:47:53
【问题描述】:

拥有两个属性相同但含义和关系不同的表是不是很糟糕?

table1 的属性 = table2 的属性。

但是table1table3 有关系 和 table2table4 有关系。

这被认为是不好的做法吗?还是应该将table1table2 整理到一张表中?

虽然如果将其整理到一张表中,那么table1 是否也会与table4 有关系?

【问题讨论】:

  • 当两个表的模式相同时,它可能意味着一些问题(即连接结果在没有进一步知识的情况下无法解释,当您确实有一个元组时,您必须知道从哪个连接产生,以及其他一些),但是,当它们具有不同的含义时,它们必须是单独的表,因为否则用户可能会编写他们不应该使用的连接,这可能会影响代码的正确性。
  • 你指的是虚假元组吗?请注意,虽然 table1 和 table2 具有相同的属性,但它们并不相关。另外,另一个可能与此无关的问题,但是仅基于不同属性的脱节实体是否被认为是不好的做法?
  • 如果“有关系”意味着“有外键”,那么这意味着这些表的属性存在差异。将公共属性放在一个表中(超类型)。将特定于一种或其他情况的属性放入引用超类型表的单独表(子类型)中。 Google for the Orthogonal Design Principle of Orthogonal Design - 一种设计原则,表明表格不应重复彼此的属性。
  • 在数据库设计中这通常不是好的做法。如果您在谈论实体和 ER 建模,那么这完全是另一回事。根据您的 ER 模型的用途,您可能希望在 ER 模型中执行此类操作。正交设计原则是关系建模的设计规则,而不是 ER 建模。
  • 属性相同但表格含义不同

标签: database entity-framework database-design relational-database entity-relationship


【解决方案1】:

可以有相同属性的表。只要找到足够的含义/谓词来记录你的应用程序状态。

基表具有“含义”或“谓词(表达式)”,它是 DBA 给出的填空(命名)语句。语句的空白名称是表的列。填空以提出关于世界的真实命题的行放在表中。填补空白以提出关于世界的虚假命题的行被排除在外。即一个表包含满足其语句的行。在不知道它的语句、观察世界并将适当的行放入表中的情况下,您无法将基表设置为某个值。你无法从基表中了解世界,除非知道它的陈述并将当前行命题视为真而将缺席行命题视为假。即你需要它的语句来使用数据库。

只要适当地声明关系/FK。 ER 中的 R 代表 relationship 意思是 association(在 entities)。然而,许多自称为“ER”的方法和产品使用“关系”代替外键(FK)。从一个关联集/表中的某些角色/列到另一个关联集/表中的某些角色/列的 FK 仅意味着源中这些角色/列的每个实体/子行必须作为键出现在目标的相应角色/列中。如果是这样,请声明关系/FK。

一个约束表达式只对应于一个命题,也就是关于世界的永远正确的陈述,同时也对应于一个关于基表的命题。

(来自this answer. 参见this answer re 属性/标题、this one re 谓词和this one re 关系/FK/链接。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 2015-12-02
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多