每个用户都有自己的数据库表吗?

时间:2010-08-01 04:57:25

标签: database-design

对于大多数可以执行CRUD操作的主要站点,每个用户都有自己的数据库表吗?我很想看到一个数据库结构的例子,多个用户,我正在看我的wordpress数据库结构,而不能想象twitter,tumblr,甚至stackoverflow实际上是如何运行数据库的。为用户动态创建表是否容易?提前谢谢。

5 个答案:

答案 0 :(得分:5)

为什么每个用户都有自己的表?用户应该只是表格中的条目。然后,您可以使用该用户的id来查找其他表中的其他记录。

如果您的数据库包含sy 6表,那么每次添加用户时,您还必须再次添加其他表。

所以现在你有10个用户和60个表。

答案 1 :(得分:3)

你的问题的答案是“不”。通常这些站点所做的是为用户提供一个表,其中表的键是整数id字段,并且属性是用户的属性(例如,名称,屏幕名称,密码等)。在SQLite中,它看起来像这样:

create table User (id integer, email string);

然后你有几个表,比如blog_posts和评论。这些表中的每一个都包含所有用户的博客文章和评论。为了识别用户,存在“user_id”字段,其将该表中的行标识为属于特定用户。

create table BlogPosts (id integer, description text, user_id integer);
create table Comments (id integer, description test, blogpost_id integer, user_id integer);

其他数据库的语法类似。 “user_id”将博客帖子绑定到用户并将评论绑定到用户。 blogpost_id将博客文章与用户联系起来。即您可以将每个用户与他的所有问题和评论相关联。

您可以为每个用户创建一个表,但是您必须具有哪个用户连接到哪个数据库的映射,并且您需要始终为每个用户打开与数据库的新连接。

答案 2 :(得分:2)

有多种不同类型的数据库,但通常不是。更常见的是,您将拥有一个表,但使用一个指定用户ID的字段。在MySQL中,您可以选择用户ID与特定值匹配的行子集,这有点像动态创建每用户表。

答案 3 :(得分:1)

每个用户不需要单独的表。但是数据库可能会有某种优化。

用户实际上表示单个表的行。就用户而言,可能存在用于特定目的的其他表。假设“Comments”表包含用户的注释,并且该表可以有多个来自user的注释。然后这个用户表与注释表有一对多的关系。

我在这里看到的一些优化是创建视图(在certin情况下的物化视图),基于所使用的查询的列索引,甚至基于日期/用户的表的分区或应用程序的一些其他相关标准。

答案 4 :(得分:0)

您不能安全地执行此操作,因为参数化查询不能将表名作为参数。