【问题标题】:Model as One to One or One to Many Relationship建模为一对一或一对多关系
【发布时间】:2015-07-10 17:10:55
【问题描述】:

我有一张桌子foo。在foo 中有 4 列:idbarTypeAbarTypeBbarTypeC。唯一的候选键是idbarTypeABC 都是非主属性。这些属性在技术上不仅仅是一个列表; bar 属于 A、B 或 C 类型这一事实并非微不足道。但是,barTypeABC 可以为空。

我可以将这张表分成三个表(例如foofooToBarbarType),从foofooToBar 是一对多的关系,但我很好奇如果/原始设计如何违反数据库设计标准或规范形式。

【问题讨论】:

  • 我认为这很有趣——如果这不是抽象的,假设每个潜在学生 id 有 150 列的班级信息,你很快就会明白为什么这是一个糟糕的设计。出于某种原因,因为这只是 3 个项目,你觉得你的设计还可以
  • 我的 2 美分:如果您的系统预计不会包含更多条形类型,那么请保留原始设计。存在过度规范化这样的事情。
  • 我认为@ZoharPeled 是完全正确的,如果某些东西被实施并且正在工作,那么可能没有理由改变它——另一方面,规范化规则和技术的存在是有原因的...... .
  • @ZoharPeled 的问题是您只是要求某人需要更多的酒吧类型。每次我团队中的开发人员尝试这样的命运时,它都会发生
  • @marshall:墨菲永远不会死……我坚信软件的进化。如果只有 3 列可能需要在遥远的将来某个时候转换为规范化结构,那么我认为目前没有理由进行规范化。 但是,如果有可能发生,那么一定要从标准化系统开始。

标签: sql normalization database-normalization


【解决方案1】:

如果您有多对多关系,通常只需要一个连接表 (fooToBar)。在一对一和一对多中,一对一 (foo) 的 id 由多 (bar) 中的条目引用。

换句话说,如果bar 中的每个条目只连接到一个foo 条目,那么bar 应该只引用foo.id。但是如果一个bar 可以链接到多个foos 并且一个foo 可以链接到多个bars,那么使用fooToBar 连接表。

【讨论】:

  • 虽然是真的,但我不确定这就是 OP 所要求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 2018-06-15
相关资源
最近更新 更多