【问题标题】:When we need to use 1-to-1 relationship in database design?我们什么时候需要在数据库设计中使用一对一的关系?
【发布时间】:2011-06-15 02:20:33
【问题描述】:

我们什么时候需要在数据库设计中使用一对一的关系?在我看来,如果两张表是一对一的关系,可以合并成一张表。这是真的吗?

【问题讨论】:

    标签: database database-design erd


    【解决方案1】:
    1. 对大型表进行垂直分区以减少 I/O 和缓存要求 - 将经常查询与很少查询的单独列分开。

    2. alter table“太贵”时向生产系统添加列。

    3. Super-type/subtype 模式。

    4. 垂直分区从表(连接)消除中受益——提供优化器 支持它(再次减少 I/O 和缓存)。

    5. Anchor modeling -- 类似于 4,但低于 6NF

    【讨论】:

      【解决方案2】:

      有时它对表锁很有用。当您向数据库添加一列时,整个表将被锁定,直到它被完全重写。当您的数据库有 100k 行时,这几乎没有影响。但如果你有 100M 行或 1B 行,那就完全不同了...

      避免占用太多空间的死行也很有用。如果您使用MVCC 并且您的某些列经常被覆盖,则有时将它们放在单独的表中是有意义的。可以说,自动清理最终会起作用,但为了节省硬盘驱动器的工作,最好清理一个单独的表中的几个 int 字段,而不是一大堆充满文本的整行,varchar(n) 和谁知道还有什么。

      最后一个原因是在 ORM 中滥用 select *。例如,如果您要存储图像或博客文章/文章,则将 blob/文本字段存储在单独的表中可能是有意义的。因为每次由于某种原因或其他原因被加载时,您的 ORM 都会加载整行。当您只需要图像或帖子的 URL 时,您最不想做的就是从数据库中提取整个二进制/文本;然而你的 ORM 会做到这一点......

      【讨论】:

        【解决方案3】:

        一般来说是的。

        如果您想以不同方式为列的子集分配权限,则可能是一个例外。

        还要考虑这只有在双方都需要时才成立。

        【讨论】:

          【解决方案4】:

          一个原因是将经常访问的数据放在一个表中,而将极少访问的数据放在另一个表中。它会运行得更快并节省一些内存。

          但在我这样做之前,我必须让我的手臂用力扭动。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-30
            • 2011-09-20
            • 1970-01-01
            • 1970-01-01
            • 2012-09-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-13
            相关资源
            最近更新 更多