Database design 有什么借口可以说;捷径;数据库模式中的列?

Database design 有什么借口可以说;捷径;数据库模式中的列?,database-design,Database Design,昨天我注意到details表中有一个外键列,它直接链接到customer表。这个details表只是一个从客户的头表中删除的连接,该头表已经为客户和details提供了正确的外键 [Cust] ---< [Header] ---< [Detail] | V |________ wtf? ____________| [Cust]--

昨天我注意到details表中有一个外键列,它直接链接到customer表。这个details表只是一个从客户的头表中删除的连接,该头表已经为客户和details提供了正确的外键

[Cust] ---< [Header] ---< [Detail]
  |                          V
  |________ wtf? ____________|
[Cust]--<[Header]--<[Detail]
|五
|________wtf____________|
ASCII db建模键

                          V
 ---< = 1 to many,  and  _| also = 1 to many
V
---<=1对多,以及124;也=1对多
当我在这个问题上向表的设计者施压时,他为这个问题进行了辩护,解释说他将使用这个专栏来保存一个连接调用

在我看来,这可以避免一个打字速度慢、懒惰的sql编写器不得不以非规范化模式为代价加入一个额外的表。(本例中哪个范式直接失败?)


即使使用这样一个概念节省了十几个连接,它是否值得呢?

是的。消除连接可能会影响性能;直接支持用户界面运行速度足以使该界面可用的查询是一个胜过设计纯度的考虑因素


尽管在规范化良好的核心模式和一组摘要表之间保持某种分区是有道理的,这些摘要表是从核心表提供的,它们支持UI。

是的。消除连接可能会影响性能;直接支持用户界面运行速度足以使该界面可用的查询是一个胜过设计纯度的考虑因素


尽管在一个规范化良好的核心模式和一组汇总表(从核心表中反馈)之间保持某种分区是有道理的,但它支持UI。

是否遇到了一个实际的性能问题,不能通过添加适当的索引来解决


如果没有,那么在某些情况下引入这样的“周期”可能会导致数据冲突,我会避免。

是否存在无法通过添加适当索引来解决的实际性能问题


如果不是这样,那么在某些情况下引入这样的“周期”可能会导致数据冲突,我会避免这种情况。

这是“视情况而定”的经典答案——一种规模并不适合所有人,你所看到的是纯学术方法与务实方法之间的永恒平衡。在任何一个方向上走得太远都会产生糟糕的结果,所以有时候你会牺牲学术上的正确性来让事情顺利进行


在不知道工作负载、查询数量和时间的情况下,无法确定此情况是过早优化还是有效优化,由于优化等原因,该连接将/不会被使用的频率。

这是“视情况而定”的经典答案-一种尺寸并不适合所有尺寸,您所看到的是纯学术方法与实用方法之间的永恒平衡。在任何一个方向上走得太远都会产生糟糕的结果,所以有时候你会牺牲学术上的正确性来让事情顺利进行

在不知道工作负载、查询数量、优化后将/不会使用连接的频率等情况下,无法确定此情况是过早优化还是有效优化

即使使用这样一个概念节省了十几个连接,它是否值得呢


数据库设计者/数据建模者的正确答案是,在某些情况下,
客户
记录可以与
详细信息
记录关联,而不需要根据业务规则提供支持的
标题
记录

为了使用外键而添加外键会破坏数据模型,从而允许使用坏数据。如果只有一条
详细信息
记录关联到
客户
,那么我希望
标题
表中有一条记录-这是Corrolary/xref/lookup表的点,允许0+个支持记录。它还保持了问题的一致性——没有一个问题是“今晚月亮在哪座房子里?”这场惨败导致了无数的问题

即使使用这样一个概念节省了十几个连接,它是否值得呢


数据库设计者/数据建模者的正确答案是,在某些情况下,
客户
记录可以与
详细信息
记录关联,而不需要根据业务规则提供支持的
标题
记录

为了使用外键而添加外键会破坏数据模型,从而允许使用坏数据。如果只有一条
详细信息
记录关联到
客户
,那么我希望
标题
表中有一条记录-这是Corrolary/xref/lookup表的点,允许0+个支持记录。它还保持了查询的一致性——没有一个问题是“今晚月亮在哪?”导致了大量查询的失败…

“数据库设计师/数据建模师的正确答案是,根据业务规则,在某些情况下,客户记录可以与没有支持标题记录的详细记录相关联。”

很明显,这两种关系都是一对多的,因此不可能在没有支持标头记录的情况下创建详细记录

但有可能的是,细节中的某些内容与另一个客户有关,而不是在遵循标题/客户“路径”时找到的客户。尽管可能不太可能,但只有定义架构的人才能回答这个问题。

“数据库设计器/数据建模者的正确答案是,根据业务规则,客户记录可以与没有支持标头记录的详细记录相关联。”

很明显,这两种关系都是一对多的,因此不可能在没有支持标头记录的情况下创建详细记录

但有可能的是细节中的某些东西