什么时候应该将DB表分成两个独立的表?

时间:2012-02-07 22:29:50

标签: mysql sql database database-design

我有一个用户表,它使用单表继承,因此我可以让顾问,客户和内部用户都在同一个表中。我想为“笔记”创建一个表,以便内部用户可以在客户和顾问上做笔记。我不确定是否应该创建一个consultants_notes和clients_notes表,或者只是创建一个notes表?我应该考虑哪些因素?

4 个答案:

答案 0 :(得分:2)

我将从一张桌子开始:

  • 您已经为任何类型的用户提供了一张表。
  • 制作三个相同的工件是没有意义的(并且使用3个表格将代码增加三倍)。

但是,如果每种音符与其他音符有很大不同,您可以考虑哪种音符更适合您:   *更多表格,每种笔记都有特定的列。   *一个通用表格,并不总是使用一些额外的列。

考虑:

  • 表格中将存储多少笔记。
  • 将为每种笔记存储哪些数据。

检查如何构建索引以访问特定类型的笔记,并确定哪些更适合您。

答案 1 :(得分:2)

您有三个类型的用户可以使用一个表,那么为什么有三个表用于他们的注释?

三个表注释的问题是,当您搜索特定用户的注释时,您必须有选择地查看其中一个表。您最终将使用if-else语句在PHP代码中对此逻辑进行硬编码 - 或 - 您将在查询中保留与三个表的连接。

如果您决定拥有四种类型的用户,该怎么办呢?

答案 2 :(得分:1)

你在评论中说:

  

我还不确定每种用户类型的注释会有多大差异,所以我希望能够保持灵活性,如果可能的话

我认为两种方式(一个或两个表)都足够灵活。但是,您还应该考虑normalization。如果你意识到顾问需要注释的日期并且客户不需要该字段,那么你将开始在你的桌子上获得大量的空值(空间,就好像有点这些天的成本很高:P和缺乏规范化)。

因此,似乎一个表解决方案是一个缺点。但是,一个表格解决方案可以简化您的查询(可读性)并为您提供更好的效果(速度),因为您不必为每个记事项表进行连接

两个表解决方案的优缺点实际上与一个表的优缺点相反。那么,你的主要限制是什么?如果是速度,你将选择一个表解决方案。在我看来,我会选择两个表解决方案,因为我不能忍受表中不必要的值。此外,具有严格的设计,即不允许您将客户注释值添加到顾问注释值的设计,比允许您通过简单更新的那样更安全。虽然您可以为列值添加限制来解决此问题,但它不一样。

嗯,这是我的拙见。希望它有所帮助,或者至少让你在选择设计之前三思而后行:)

PS:要考虑的因素是粗体

答案 3 :(得分:0)

我看到你标记为php,所以除非您使用两个不同的页面来读取/写入不同用户类型的注释,否则我会选择单个表格,因为您不需要两个单独的查询。 除非您希望表中有数千个注释,否则单独的表可能会更有效。