【发布时间】:2016-05-06 14:24:20
【问题描述】:
我们有一个 SQL 数据库,其中有一个用于用户的表 (1) 和一个用于用户保存信息的表 (2)。每条信息是表(2)中的一行。所以我的问题如下 - 如果我们打算将用户数量增加到超过 1.000.000 并且每个用户可以拥有超过 10 条信息,那么以下哪个是构建我们的数据库的更好方法:
a) 有 2 个表 - 1 个用于用户,1 个用于来自所有用户的信息,与具有 ID 的用户相关
b) 每个用户都有一个单独的表。
提前致谢。
【问题讨论】:
-
另一种选择! (b太可怕了。)
-
100%为什么要为每个用户提供 1.000.000 个表?
-
(b) 太可怕了。它永远无法扩展。如果索引正确,MySQL 可以处理具有 100 条子行的一百万用户。您在这里犯了过早的优化。
-
嗨,jarlh,非常感谢。仅拥有 1.000.000 个用户,每个用户有 10 行,这意味着 DB 中有 10.000.000 行。它不会影响速度,而不是为每个用户的信息单独提供一个表吗?
-
您对表 2 的设计很糟糕。它被称为 EAV 表,它是性能的杀手。正确完成您的工作,并将您需要的用户属性定义为此表中的单独列。如果您需要在属性中增加一些灵活性,请在之后添加一个 EAV 表,但是您需要的 99% 的属性应该可以预先定义,这将使您的数据库工作得更好。如果您真的无法弄清楚属性应该是什么,那么关系数据库就是错误的工具。
标签: mysql sql database database-design relational-database