2012-02-07 52 views
0

我有一个用户表,它使用单表继承,这样我可以在同一个表中同时拥有顾问,客户和内部用户。我想为“笔记”创建一个表格,以便内部用户可以为客户和顾问做笔记。我不确定是否应该创建consultants_notes和clients_notes表,还是只创建一个注释表?我应该考虑哪些因素?什么时候DB表应该分成两个单独的表?

+0

你说'内部用户可以在客户端和consultants'笔记,并这意味着一个笔记必须有一个InternalUserId和一个ClientUserId或ConsultantUserId?这意味着每个NOTE的两个字段 – 2012-02-08 00:01:28

+0

注释将具有internal_user_id和subject_user_id(clientUserId或consultantUserId)。 – blacktie24 2012-02-08 00:07:39

回答

1

您的评论说:

我真的不知道还多少为每个用户类型的音符会有所不同,所以我希望能够保持它的弹性,如果可能的话

我认为这两种方式(一个或两个表)将足够灵活。但是,您还应该考虑normalization。如果你后来意识到顾问需要注释的日期,并且客户不需要这个字段,那么你会开始在你的表格上获得很多空值(空间,好像现在有点花费那么多:P和缺乏标准化)。

所以看起来一张桌子的解决方案是一个缺点。但是,一个表的解决方案将简化您的查询(可读性),也给你更好的性能(速度),因为你不会有使每个每个音符表的连接。

的优点和两个表溶液的缺点实际上是相反的一个表中的那些。那么,你的主要限制是什么?如果速度很快,你会选择一个表格解决方案。在我看来,我会选择两个表格解决方案,因为我无法忍受桌子上有不必要的价值。此外,有一个严格的设计,即不允许您将顾客票据价值添加到顾问票据价值的设计,比允许您使用简单更新来做到这一点要安全得多。尽管您可以为列值添加限制来解决此问题,但它并不相同。

嗯,这是我的愚见。希望它能帮助,或者至少让你三思而后行选择你的设计:)

PS前:要考虑的因素是大胆

0

我看到你的标签php所以除非你使用两个不同的页面来读/写不同的用户类型的笔记我会去一个表,因为你不需要两个单独的查询。 除非您希望在表中有数千个注释,在这种情况下,单独的表可能更有效。

2

我会用一个表开始:

  • 你已经只有一个表中的任何类型的用户。
  • 制作三个相同的工件没有意义(并且使用三个表的代码的三倍)。 *更多的与各种音符的具体列的表:

但是,如果各种音符将从你可以考虑这是对你更好的人差别很大。 *一个通用表,有些额外的列并不总是被使用。

考虑:

  • 多少音符将被存储在表中。
  • 什么数据将被存储为每种类型的笔记。

检查如何构建索引以访问特定类型的笔记并决定哪些对您更好。

+0

事情是,我不确定每种用户类型的笔记会有多少不同,所以我希望能够保持它的灵活性,如果可能的话。这是一个通用表的问题吗? – blacktie24 2012-02-07 22:50:24

+1

我不这么认为。您以后可以随时拆分注释表 - 只需创建新表格,将注释移动到新表格并发布使用新数据结构的新版本产品。但现在 - 使用[KISS](http://en.wikipedia.org/wiki/KISS_principle)和[YAGNI(http://en.wikipedia.org/wiki/You_ain't_gonna_need_it)。 – 2012-02-08 08:47:59

2

对于三种类型的用户,你有一张表,那么为什么他们的笔记有三张表?

三张笔记表的问题在于,当您搜索特定用户的笔记时,您将不得不选择查看这些表中的一个。您最终将使用if-else语句在您的PHP代码中对此逻辑进行硬编码 - 或者 - 您将在查询中与三个表连接。

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

相关问题