【发布时间】:2011-04-27 21:20:37
【问题描述】:
我有 3 个用于会员系统的 MySQL 表。
-
users:最低要求是用户,仅与帐户信息(电子邮件、密码、is_activated 等)有关 -
user_profiles:用户提供的个人信息(姓名、地址、电话……) -
user_member_profiles:管理员严格管理信息(缴纳注册费、参加会议等)
这些可以压缩到一张表中,让我省心并保持我的代码干净 - 但我觉得最好将它们分开,因为它们的用途略有不同。
选项 1: 保持这种状态,继续做 JOINs 和乏味的 UPDATEs (这段数据放在这张桌子上,这块放在另一张桌子上,等等.)。对我来说有更多的工作,但也许更有意义?
选项 2:将所有内容合并到一张表中。
我认为使用一张表会更快,无需连接表。也许这取决于数据?每个表大约有 12-20 个字段,因此合并后的表会很大。
每个用户在每个表中的个人资料不超过 1 个,但甚至可能根本没有个人资料(或总共可能只有 1 个)。
为此添加一点上下文:它适用于用 PHP 编写的不断发展的 CMS,我需要对每次安装的表进行调整。管理员需要以类似电子表格的方式管理成员,因此我一次最多选择 200 个用户。
从性能、设计或组织的角度来看,正确的方法是什么?
【问题讨论】:
-
无论表结构如何,您都应该始终只选择您需要的内容!我看不出这几个连接会成为一种负担。
-
选项 2 的一部分,“请确保只选择我需要的内容”,似乎与“我还需要每次都从每个配置文件表中选择 * 因为我需要每个可用字段。”
-
@Catcall:我的意思是当我需要来自一个配置文件的数据时,我需要所有数据,但我并不总是需要来自任何配置文件的数据。
-
@HLGEM:是的,我明白了,但是我发现 JOIN 语句比从一个表中进行简单查询花费的时间更多,并且它使管理执行更新变得更加困难(来自 html 表单中的应用程序),因为我必须挑选每个字段并确保它进入正确的配置文件表。
-
如果您的连接语句很慢,那么您需要确保正确的索引到位。数据库经过优化以进行连接,但您必须进行正确设置。
标签: mysql database database-design relational-database