【问题标题】:Does a one-to-one Relationship Mean Unnecessary Tables When Designing An SQL Database? [closed]设计 SQL 数据库时,一对一关系是否意味着不必要的表? [关闭]
【发布时间】:2013-07-25 19:37:44
【问题描述】:

我的问题比其他任何问题都更具概念性。我正在为即将使用 SQLAlchemy(用于 sql 数据库的 python 工具包,http://www.sqlalchemy.org/)创建的数据库设计架构,并且我遇到了一种情况,在数据库的两个表之间,存在一个一对一的关系。具体来说,我有一个名为“Identification”的表,其中包含两列:1)一个内部 id(用作主键),2)一个对象 ID。该表与另一个我们可以称为“分析”的表具有一对一的关系,它代表了一个独特的查找表,用于查找我个人在每个对象上生成的数据(通过我的研究)。

我的问题是,一对一关系的存在是否意味着我应该将“识别”和“分析”组合到一个表中?我为 sql 数据库查看的每个模式都显示了一对多或多对多类型的场景。在数据库表之间建立一对一关系在概念上是否存在错误或坏处?我什至追求这一点的原因是因为我执行的这种分析可能是我想对每个对象进行的多种类型的分析之一,将识别表从数据中分离出来会很好我从每个分析中回来。

感谢任何意见或cmets!

【问题讨论】:

    标签: python sql database-design sqlalchemy


    【解决方案1】:

    这很容易双向。

    在您所描述的情况下,它似乎是一对一的并且第一个表只包含标识符,我会说最好对表进行规范化(组合它们),因为这允许您删除连接从有效的每个查询中需要的内容。

    一般来说,只要存在有效的一对一关系,我就会认为这是真的。话虽如此,还有另一种变体,即 0..1 到 1。在这种情况下,例如,表 a 中的一行可能在表 b 中具有 1 行,或者没有。在这种情况下,将它们分开是有利的,因为否则您的列可能不适用于每一行并且只是空的。

    通常,在设计您的数据库时,请问自己一个问题:“将它们分开我会获得什么,如果我不合并它们会失去什么”。在第一种情况下,您获得的收益很少并且性能下降。

    【讨论】:

    • 这很有帮助,谢谢。我想我会在那时将它们分开,因为我所指的这些多重分析可能不会在所有可能的对象上系统地运行。它们可能只在它们的一个子群上运行,从而产生您描述为 1 比 1 或 0 的情况。
    猜你喜欢
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2014-11-06
    • 1970-01-01
    • 2018-09-29
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多