【发布时间】:2015-06-29 22:41:51
【问题描述】:
我正在为用户列表开发一个 MySQL 数据库,并且我正在尝试确定最有效的设计方法。
我的问题在于有 3 种类型的用户:“普通”、“普通”和“超级”。一般用户和普通用户仅在某些列的值上有所不同,因此存储它们的架构是相同的。但是,超级用户至少有 4 列额外的信息需要存储。
此外,每个用户都需要一个唯一的user_id,以供网站其他部分参考。
因此,我可以将所有 3 个用户保留在同一个表中,但是我会为一般用户行和普通用户行存储大量 NULL 值。
或者,我可以将用户分成 2 个表:一般/普通和超级。这将摆脱大量的NULLs,但需要更多的工作来跟踪 user_ids 并确保它们是唯一的,因为我必须在我的 PHP 中处理它而不是仅仅做一个 SERIAL 列在上面的单表解决方案中。
哪种解决方案在内存使用和性能方面更高效?
或者我没有看到其他更好的解决方案?
谢谢!
【问题讨论】:
-
将您的用户放在一张桌子上。
-
由于您不能使用 PHP 或任何其他语言来强制执行参照完整性,因此您提出的让 PHP 管理数据库唯一性的解决方案是不可能的。我会选择一张桌子,毫无疑问。 4 个可为空的列根本不是什么大问题,如果您的用户在逻辑上适合一个表 - 无需将其拆分为多个表。它不会变得更快,但是在游戏中添加一个额外的表格只会增加您的应用程序的复杂性,而这是您真正不想要的。