无限数量的表与具有多列的行的不确定数量

时间:2013-12-16 19:00:50

标签: mysql sql-server database oracle database-design

哪一个更好(性能明智和维护),一个动态创建表或只是动态添加行的数据库?

假设我正在构建一个允许用户注册的项目。假设我有一个只存储基本个人信息的表,如姓名,dob,加入日期,地址,电话等。说10列。

现在是棘手的部分。

场景1:创建多个表格

当用户完成注册时,会创建一个消息表。因此,为每个用户创建每个表。每个消息表的行因每个用户而异。

同样,每个用户都有一个购物车表,如消息表。

对于此场景1,每次注册都会创建2个表。

场景2:添加行

这里的场景也是一样的,但在这种情况下我有2个表用于消息和购物车。只有在有活动时才会添加行。

注意:

您必须假设用户数量超过2000,并且预计有50多个用户始终处于活动状态。这意味着两个案例的消息和购物车表总是很忙。就像总是同时查询更新,添加,删除,插入,选择等一样。

哪个场景会占用更多磁盘空间。

在写这篇文章时,我想知道Facebook和其他人使用什么技术。如果他们使用场景2样式(所有用户(数十亿)使用相同的大长消息表)...只是想知道

1 个答案:

答案 0 :(得分:4)

  

数据库有一些为Database Design定义的基本规则   “数据库规范化”,这些基本规则允许我们消除   冗余数据。

     

第一范式
  仅在一列中存储一条信息,一列只应存储一条信息。

     

2ns普通表格
  表应该只包含彼此相关的列。所有相关列应位于一个表中。

     

现在,如果您查看建议的设计,每个用户的单独表格   将拆分有关1000的所有用户的SAME信息/列   表。这违反了第二范式。

     

您需要创建一个表并将所有相关列放入其中   所有用户都有一个表。你可以使用普通的t-sql来   查询你的数据,但如果你有一个每个用户的表,我的猜测是你的   将构建您从应用程序执行的每个查询   动态地为每个查询使用动态sql。哪一个   是Sql Devils之一,你想避免在任何时候使用它   可能。

     

我的建议将会更多地了解数据库设计。一旦你有了   对数据库设计有一些基本了解。把它画在一块上   纸,看看它是否为您提供了所有业务   需要/期望从这个应用程序,现在花一些时间它   以后会为你节省很多痛苦。