【问题标题】:In SQL / MySQL, are there reasons not to put one-to-one relationship in the same table?在 SQL/MySQL 中,是否有理由不将一对一的关系放在同一张表中?
【发布时间】:2010-04-29 18:51:58
【问题描述】:

一对一的关系通常可以存储在同一个表中。是否有理由不将它们存储在同一张表中?

【问题讨论】:

    标签: sql mysql one-to-one schema-design database-design


    【解决方案1】:

    列的数量和类型。表中列的大小有限制。见here。每行最多 8,060 字节。

    非常大的表也会影响性能,并且很难优化和索引。

    这与保持概念上不同的数据不同,彼此分开。例如,一个国家和货币具有 1 对 1 的关系(说明性示例,我知道并非总是如此)。我仍然不会让他们在一起。

    【讨论】:

    • 太宽的表格访问速度也会变慢。
    • @HLGEM - 非常正确。添加到答案:)
    • 每行 8060 字节的限制是旧的 SQL Server 限制。这适用于 SQL Server 2005:create table big_row (a varchar(5000),b varchar(5000),c varchar(5000),d varchar(5000),e varchar(5000),f varchar(5000),g varchar(5000), h varchar(max));insert into big_row values (replicate('A',5000),replicate('B',5000),replicate('C',5000),replicate('D',5000),replicate('E',5000),replicate('F',5000),replicate('G',5000),replicate('H',10000)) 您的链接适用于 SQL Server,无论如何我认为问题是关于 MySql。但是,您对大表的看法(我假设您的意思是宽度,而不是行)是正确的。
    【解决方案2】:

    您将在http://onlamp.com/pub/a/onlamp/2001/03/20/aboutSQL.html 下找到一些关于何时创建一对一关系有用的信息

    最重要的是:

    可能需要的关键指标 因为一对一的关系是 包含以下字段的表 仅用于特定的子集 该表中的记录。

    【讨论】:

      【解决方案3】:

      我这样做是为了防止锁定/阻塞,将读取的重列放在一个表中,将更新重的列放在另一个表中,就像一个魅力。大量的大型更新事务正在减慢大量读取速度。

      【讨论】:

        【解决方案4】:

        一到零或一的关系很常见,并且从可选关系到强制关系——http://onlamp.com/pub/a/onlamp/2001/03/20/aboutSQL.html 中给出的示例就是这种关系,而不是一对一关系。类型/子类型关系可以这样实现。

        当每一个都代表一个明确的、有意义的实体时,就会发生一对一的关系,在不同的上下文中,它可能处于某种不同的关系中,并且对需求的微小变化可能会改变关系的基数。哪个链接到哪个链接是任意的,因此最好选择一个作为可选并将一转换为零或一。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-26
          相关资源
          最近更新 更多