单独的表格或区分字段?

时间:2014-09-10 17:38:54

标签: mysql

我运行的两个网站都是基于订阅的服务。这两个网站都允许订阅者制作" subusers"可以使用他们的订阅但具有不同的登录(出于安全性和日志记录的目的)。每个网站都有不同的实现方式。

单独表

第一个系统有一个名为subsusers的单独表。每个子用户都链接(通过外键)到user。此设置需要登录脚本中的其他代码以及需要访问的任何用户信息。

区分字段

其他网站没有subusers表格。相反,users表中的字段指向另一个用户作为其" parent",表示它是一个子用户。这需要在登录和用户信息脚本中减少编码。

这两种设置都功能齐全,工作正常。我想知道:每个(速度,编码,麻烦)有哪些优点和缺点?

1 个答案:

答案 0 :(得分:1)

选项1:

优点:

  1. 如果正确设置了密钥,则可以更轻松地实现级联删除/更新。例如,如果您的用户取消,则删除它们将通过外键自动删除其他用户。如果您需要更新用户帐户并让这些更改影响其所有子用户,那么这里也非常简单
  2. 如果用户和子用户之间的数据要求大不相同,您可以避免在一个表解决方案中需要的大量未使用的字段
  3. 缺点:

    1. 基本上你描述的一切和
    2. 如果子用户成为用户会怎样?或者用户成为子用户?如何保持应用程序逻辑整洁用户是用户表和子用户表的成员?
    3. 选项2:

      赞成  1.管理上述场景类型更容易,用户可能成为子用户,反之亦然。

      1. 应用程序逻辑简单明了,特别是如果您没有多个级别(例如子子用户和子子用户)
      2. 缺点

        1. 如果你确实有多个级别(特别是如果你有一个可变数量的级别),这可能会有点痛苦
        2. 如果您的用户数据和子用户数据完全不同,并且您发现自己为每个用户和子用户插入了大量的空值,这可能是一个很好的迹象,表明需要更改架构(使用用户 - 子用户设置或者可能是其他东西,比如将用户meta与用户分开,等等)
        3. 在两者之间,如果是我,我可能会选择选项2.它在很多情况下都比较清洁,你可能没有多个级别和/或一个未知数量的水平。如果这两个陈述都是真的,那么维护选项2可能更容易,而不是选项1.