我有一个用户表,它使用单表继承,因此我可以让顾问,客户和内部用户都在同一个表中。我想为“笔记”创建一个表,以便内部用户可以在客户和顾问上做笔记。我不确定是否应该创建一个consultants_notes和clients_notes表,或者只是创建一个notes表?我应该考虑哪些因素?
答案 0 :(得分:2)
我将从一张桌子开始:
但是,如果每种音符与其他音符有很大不同,您可以考虑哪种音符更适合您: *更多表格,每种笔记都有特定的列。 *一个通用表格,并不总是使用一些额外的列。
考虑:
检查如何构建索引以访问特定类型的笔记,并确定哪些更适合您。
答案 1 :(得分:2)
您有三个类型的用户可以使用一个表,那么为什么有三个表用于他们的注释?
三个表注释的问题是,当您搜索特定用户的注释时,您必须有选择地查看其中一个表。您最终将使用if-else语句在PHP代码中对此逻辑进行硬编码 - 或 - 您将在查询中保留与三个表的连接。
如果您决定拥有四种类型的用户,该怎么办呢?
答案 2 :(得分:1)
你在评论中说:
我还不确定每种用户类型的注释会有多大差异,所以我希望能够保持灵活性,如果可能的话
我认为两种方式(一个或两个表)都足够灵活。但是,您还应该考虑normalization。如果你意识到顾问需要注释的日期并且客户不需要该字段,那么你将开始在你的桌子上获得大量的空值(空间,就好像有点这些天的成本很高:P和缺乏规范化)。
因此,似乎一个表解决方案是一个缺点。但是,一个表格解决方案可以简化您的查询(可读性)并为您提供更好的效果(速度),因为您不必为每个记事项表进行连接
两个表解决方案的优缺点实际上与一个表的优缺点相反。那么,你的主要限制是什么?如果是速度,你将选择一个表解决方案。在我看来,我会选择两个表解决方案,因为我不能忍受表中不必要的值。此外,具有严格的设计,即不允许您将客户注释值添加到顾问注释值的设计,比允许您通过简单更新的那样更安全。虽然您可以为列值添加限制来解决此问题,但它不一样。
嗯,这是我的拙见。希望它有所帮助,或者至少让你在选择设计之前三思而后行:)
PS:要考虑的因素是粗体
答案 3 :(得分:0)
我看到你标记为php
,所以除非您使用两个不同的页面来读取/写入不同用户类型的注释,否则我会选择单个表格,因为您不需要两个单独的查询。
除非您希望表中有数千个注释,否则单独的表可能会更有效。