我的数据库中可以有一百万个表吗?

时间:2015-03-01 22:16:51

标签: mysql database postgresql social-networking

在我的数据库中拥有一百万个表是否有任何优点/缺点。

我正在尝试实施评论。到目前为止,我可以想到两种方法: 1.从1表中的所有帖子中获取所有评论。 2.为每个帖子设置一个单独的表格,并将该帖子中的所有评论存储在相应的表格中。

哪一个更好?

由于

3 个答案:

答案 0 :(得分:3)

最好有一个表用于评论,其中一个字段用于标识每个评论所属的帖子ID。如果您这样做,编写查询以获取给定帖子ID的评论将会容易得多,因为您首先需要动态确定您正在查看的表格的名称。

我在这里只能代表MySQL(不确定它在Postgresql中的工作原理),但请确保在post id字段中添加索引,以便查询快速运行。

答案 1 :(得分:0)

可以拥有一百万个表,但由于多种原因,这可能并不理想[*]。经典的RDBMS通常被部署和使用。优化用于在数百/数千个表中存储数百万/数十亿行。

至于你试图解决的问题,就像其他人所说的那样,使用外键来关联一对表:posts&评论a [MySQL语法]:

create table post(id integer primary key, post text);
create table comment(id integer primary key, postid integer , comment text, key fk (postid));

{您可以添加约束来强制评论和帖子之间的参照完整性以避免孤立评论,但这需要存储引擎的某些功能才能生效}

主键ID的生成留给了读者,但是像自动增量这样简单的东西可以让您快速启动[http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html]

哪个更好?

除非这是家庭作业,否则将这种材料存储在经典的RDBMS中可能不适合当代习语。保持相同的精神架构并使用类似SOLR / Elasticsearch的东西存储您的材料并从内容索引中受益,因为我相信您会想避免编写自己的搜索引擎?您可以使用像sphinx [http://sphinxsearch.com]这样的东西来以相同的方式索引MySQL。

[*]如果没有一些非常规的架构结构,元数据的数量和底层文件系统的压力将会产生问题(例如,某些日期/遗留存储引擎,如MySQL上的MyISAM将为每个表创建三个文件)。 / p>

答案 2 :(得分:0)

使用关系数据库时,您必须了解(一点点)规范化。 third normal form(3NF)很容易理解,几乎可以在任何情况下使用。可以找到一个简短的教程here。如果需要更多/其他/更好的示例,请使用Google。

每张唱片一张桌子是红灯,你知道你错过了什么。这也意味着您需要动态DDL,必须在创建新记录时创建新表。这也是一个安全问题,数据库用户需要许多权限并成为安全风险。