代码之家  ›  专栏  ›  技术社区  ›  Geoff Harper

我应该如何构建关系松散的SQL db

  •  0
  • Geoff Harper  · 技术社区  · 6 年前

    我想这更像是一个哲学问题。我有一个项目,有4个变体。这些变体将共享大约80%的列。所讨论的项目是一个投资组合示例,其变化是摄影/视频/网络/图形。他们将共享诸如客户、日期等列名。

    我的问题是,我应该为每个变体设置一个表,还是为特定于变体的列设置一个基表和一个附加表。我“永远”不需要同时下拉一个照片/网络示例,或者你有什么。

    我不知道如何在谷歌上搜索这个,尽管它很基本

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    你有一段感情。关键问题是如何 另外 表将引用此实体。

    有三种选择:

    1. 所有引用都指向父实体。例如,所有项目都有价格历史记录、类别或注释,并且只引用父项。
    2. 所有参考都是指孩子们。例如,照片中可能有对象,视频中可能有制作人列表,等等。
    3. 引用可以是其中之一。

    答案是什么?(1) 建议所有行都应位于一个表中,并为所有行共享一个id。(2) 建议对于每个变体,行应位于单个表中。

    (3) 有点难。我建议使用包含80%列的父表。然后,将子表与其余的子表放在一起。子表的主键与父表的主键相同(是的,列可以同时是主键和外键)。

    对于这种情况,您需要做一些工作来确保给定的父实体正好出现在一个子表中。可以使用外键和触发器(在MySQL中)处理。

        2
  •  0
  •   nitsram    6 年前

    只要变量id没有特定的规则,就创建一个媒体表。

    如果您决定将它们分开,我希望表中有日期和client\u id。