Mysql 基本数据库设计和复杂性

Mysql 基本数据库设计和复杂性,mysql,database-design,Mysql,Database Design,我正在设计一个系统,它有一个数据库来存储用户和与用户相关的信息。更具体地说,表中的每个用户只有很少的信息。例如名称、密码、uid 然后每个用户都有零个或多个容器,我最初这样做的方式是在数据库中创建第二个表,其中包含容器,并有一个引用拥有容器的用户的字段。比如容器名称、内容、所有者 因此,对来自容器的数据的查询类似于: SELECT content FROM containers WHERE (containerName='someContainer' AND owner='someOwne

我正在设计一个系统,它有一个数据库来存储用户和与用户相关的信息。更具体地说,表中的每个用户只有很少的信息。例如名称、密码、uid

然后每个用户都有零个或多个容器,我最初这样做的方式是在数据库中创建第二个表,其中包含容器,并有一个引用拥有容器的用户的字段。比如容器名称、内容、所有者

因此,对来自容器的数据的查询类似于:

SELECT content
  FROM containers
 WHERE (containerName='someContainer' AND owner='someOwner');
我的问题是,如果这是一个好方法,我想说,我们有成千上万的用户说。。。每个容器5个(但是每个用户可以有不同数量的容器,但5个可能是典型情况)。我担心的是,当一个查询中5*1000个条目中有5个条目时,搜索数据库的速度会变慢。(我们通常只需要查询一个特定容器的内容,我们查看数据库的开销基本上是4995个条目,对吗?如果我订阅了100万用户,它会变成一个巨大的表,直觉上感觉这是个坏主意

我的第二个想法是每个用户都有表,但是这也不是一个很好的解决方案,因为这会在数据库中给我1000个表,这(凭直觉)似乎是一个不好的方法


如果您能帮助我们理解如何设计它,我们将不胜感激,我希望这一切都清晰易懂。

处理这一问题的公认方法是在
owner
字段上创建
索引。这样,MySQL就可以对
owner='some value'
条件进行优化查询

另见:


你说1000张表是不可扩展的。你一旦开始达到几百万条记录,你可能想考虑进行分割(根据用户属性将记录分成几个位置)…但到那时你已经很成功了,我想,-(<)/p> < p>如果它是一个RBMS(类似Oracle/MySQL)数据库,您可以在经常查询的列上创建索引,以优化表遍历和查询。索引是为主键和(可选)外键自动创建的。

哇,谢谢,这似乎正是我要找的,谢谢!你会让所有的容器都是唯一的吗?还是所有用户共享20-30个容器?嗯。。每个用户-容器对都是唯一的,但不同的用户可能有一个“相同容器”的实例。因此,实际上userA containerA的内容不同于userB containerA的内容,有意义吗?那么您应该为容器创建一个单独的表,在
contents
表中使用
container\u id
,并连接3个表。这将执行得更快,占用的空间也更少。我努力理解这一点,但我想我看到了你希望它工作的方式。这是有道理的。因此,基本上,内容查找将减少容器的重复,对吗?正确,现在是您的设计。