0

我被其他人指出,以下数据库设计存在严重问题,谁能告诉我为什么?

  1. 一个 tb_user 表保存所有用户信息
  2. tb_user 表将只有 3 - 8 个用户。
  3. 每个用户的数据将保存在一个单独的表中,以用户名命名。假设一个用户叫:bill_admin,那么他有一个单独的表,即bill_admin_data,用来保存所有属于他的数据。所有用户的数据共享相同的结构。

指出这个问题的人说我应该将所有数据合并到一个表中,并使用FK来区分它们,但我有以下说法:

  1. 用户只有 3 - 8 人,所以不会有很多桌子。
  2. 每个用户都有一个非常大的数据表,比如 50 万条记录。

像这样设计数据库是一种不好的做法吗?为什么?谢谢你。

4

3 回答 3

5

因为它不是很可维护。

1)向数据库添加数据永远不需要修改结构。在您的模型中,如果您需要添加另一个人,您将需要一个新表(或两个)。你可能认为你永远不需要这样做,但相信我。你会。

因此,假设,例如,您想向应用程序添加功能以向数据库添加新用户。使用这种结构,您必须授予最终用户创建新表的权限,这会产生安全问题。

2)它违反了DRY原则。也就是说,您正在创建相同表结构的多个相同的副本。这使维护变得很痛苦。

3) 跨多个用户的查询将变得不必要地复杂。没有充分的理由将每个用户拆分到一个单独的表中,而不是对必须针对该数据库模型编写查询的人产生仇视。

4) 如果您因为每个用户都有很多行而将其拆分为多个表以提高性能,那么您就是在重新发明轮子。您使用的 RDBMS 无疑具有索引功能,可以有效地查询大型表。您自己开发的 hack 不会胜过平台处理大数据的方法。

于 2012-05-29T04:51:27.380 回答
1

我不会说这本身就是糟糕的设计。这不是关系数据库设计和优化的设计类型。

当然,您可以存储您提到的数据,但许多操作并非易事。例如:

  • 添加新人
  • 删除一个人
  • 根据所有人员的数据生成报告

如果你真的不在乎这样做。继续按照您的建议制作表格,尽管我建议使用非关系数据库,例如 MongoDB,它更适合这种类型的结构。

如果您更喜欢使用关系数据库,通过按类型而不是按人聚合数据,在添加新人员和计算报告时会给您带来很大的灵活性。

500k 行并不是“很大”,所以在设计时不要担心大小。

于 2012-05-29T04:54:10.813 回答
-1

对于这些类型的需求,最好使用像 mongoDB 这样的基于文档的数据库。

于 2012-05-29T04:53:46.863 回答