2011-03-19 79 views
3

我想知道我的方法在这里是否不正确MySQL在两个数据库之间共享表格

我有一个简单的网站,您可以注册。它有一个名为USERS的主数据库,该数据库有一个包含所有用户列表的表格,然后为每个新用户生成一个名为DB1,DB2,...,DBn的新数据库。我这样做的原因是因为每个用户都存储了很多信息,我认为这会是一个更好的方法。但是,现在我遇到了问题,即用户数据库需要访问USERS数据库中的表(针对外键),我无法弄清楚如何执行该操作。我承认我没有太多的MySQL经验,所以这可能是一个非常糟糕的决定,为每个用户创建一个新的数据库。是这样吗? MySQL的效率如何?例如,我可以为(假设)100,000个用户创建一个列表,其中每个用户还有100个条目,可以说他们已经上传了图片。

谢谢

回答

2

这是一个非常糟糕的设计决定。你想要做的是为这个应用程序中的所有表创建一个单一的数据库。在你的例子中,你将有一个数据库(称之为MyProject)。您将拥有一个用户表,将其称为User,其中包含您的所有用户条目 - 100,000个条目是用于现代硬件的小型数据库,因此请不要担心。然后你将得到一个名为UserPhoto的表格,其中包含User中主键的引用以及任何其他你需要的数据。

+0

这不会太难转换。出于好奇,桌子大小对搜索速度有什么影响?例如,如果我有一张照片评论表,那么假设有100,000个用户,每个用户1000张照片,每张照片100个评论,当找到特定的子集时,会出现100,000 * 1000 * 100个条目来搜索。欢呼 – puk 2011-03-19 21:50:10

+0

表格大小会影响搜索速度,是的。但是,索引做的是让每个查询都不会扫描所有100,000 * 1000 * 100行。它使用某种方法(取决于实现)以显着较低的成本执行对数据的查找。再次,对于现代数据库来说,100,000/1000/100结构相对较小。正确放置索引,你会没事的。 – Bleaourgh 2011-03-19 21:59:13

1

可以使用语法

db_name.table_name.table_field 
5

我也在考虑同样的问题,使数据库之间的查询。我发现的解决方案:http://drupal.org/node/37075

您可以在每个数据库中创建代表您的常见USERS表的VIEW。

mysql> use DB1; 
mysql> CREATE VIEW users AS 
mysql> SELECT * 
mysql> FROM USERS.users 
相关问题