2010-08-01 151 views
5

对于大多数主要网站,您可以进行CRUD操作吗?每个用户都有自己的数据库表吗?我很想看到一个数据库结构的例子,其中有多个用户,我正在查看我的wordpress数据库结构,并且无法了解twitter,tumblr甚至是stackoverflow如何运行数据库。动态地为用户创建表格很容易吗?提前致谢。每个用户都有自己的数据库表吗?

+2

在解决动态表创建之前,我会寻找其他解决方案 – 2010-08-01 05:02:38

回答

5

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

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

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

+1

现在考虑必须连接到特定用户的正确表... :) – 2010-08-01 05:54:43

+0

哎呀!是什么噩梦 – griegs 2010-08-01 05:59:26

2

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

+0

实体 - 属性 - 值(EAV)表通常令人讨厌 - 性能差,但可能是适应功能要求的必要罪恶。 – 2010-08-01 05:56:06

+0

@OMG,EAV如何发挥作用?根据数据类型您有不同的表格,但是您可以通过字段将条目链接到用户。我不确定这与EAV有什么关系。 – 2010-08-01 06:02:45

1

对于每个用户,不需要单独的表格。但是可能会有一些涉及数据库的优化。

用户实际上代表单行表的行。关于用户,可以有其他表格用于特定目的。假设“评论”表包含用户的评论,并且该表可以具有来自用户的多个评论。然后,该用户表与评论表具有一对多关系。

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

+0

物化视图是臭名昭着的不适应;表分区是您必须支付的一项功能(仅在SQL Server的企业版/开发版中提供,不知道关于Oracle ...)。这两个概念都超出了OP的要求。 – 2010-08-01 05:58:01

3

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

create table User (id integer, email string); 

然后你有两个表,比如blog_posts和comments。每个表格都包含所有用户的博客文章和评论。为了识别用户,有一个“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将博客帖子关联到用户。即您可以将每个用户与他的所有问题和评论相关联。

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

0

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

相关问题