数据库中有200个表太多了吗?

时间:2012-09-27 02:22:07

标签: php mysql database database-design

显然,如果没有更多信息,这个问题就无法回答,所以让我扩展一下。

我正在建立一个拥有约1000家商店的商店数据库

它们分为13大类产品。

这13个主要类别每个都有大约4或5个子类别

那些4或5(总共约65个)各有约4或5个。

我所做的就是为每一位父母及其直接子女制作一张桌子。然后为每个孩子及其子女提供表格。

在逻辑方面,它将满足我的编程需求,但我想知道如果有这么多表并且有更好的方法可以完全非正统。

还想知道在查询时是否会有多个表超载/滞后系统。

我本可以在2个表中完成整个过程,我只为每个类别分配了一个parent_id,但是从一个看起来非常有组织或层次的视觉角度来看,这就像一棵完美的树。

5 个答案:

答案 0 :(得分:4)

使用关系数据库结构(具有一对多或多对多关系)和正确的索引。每个类别都有一个单独的表在逻辑上没有任何意义 - 这就是发明关系数据库的原因。

您的解决方案应该有效,但从数据的角度来看,这不是很好的做法。

获得更多specefique

这样的数据库结构
TABLE categories:
id  title   parent_id(NULL)

然后使用PHP中的一些递归对您从中获得的结果进行排序。

答案 1 :(得分:2)

如果所有表都具有相同的字段或大多数相同的字段,并且它们代表相同的东西(即产品),那么仅使用两个表的解决方案是设计此数据库的更标准方法。一个表列出了所有产品及其所属的类别(最具体的类别),另一个表列出了类别。有关处理此表中显示的分层信息的不同方法的讨论,请参阅this questionnested set model也可能符合您的需求。 (这个问题没有讨论,因为它不能满足提出问题的人的需求。)根据你选择的模型,你可能需要添加第三个表来实现模型。

答案 2 :(得分:2)

对于您描述的问题,200个表格过于苛刻。您可以在一个表中存储有关商店的数据,在另一个表中存储有关类别的数据,在第三个表中存储有关子类别的数据,最后在第四个表中存储有关子子类别的表。然后,您可以在第五个表中存储与给定商店和给定子类别相关的数据。

您可以使用外键/主键引用定义将这些表中的行绑定到其他表中的行,并使用join根据需要组合数据。

它更简单,性能更好,并且更具前瞻性。您可以在不更改数据库结构的情况下添加新存储。不仅如此,您还可以在构建数据库后对数据进行各种查询。

以各种方式利用相同的数据实际上是数据库的全部内容。使用您的结构,每次要以新的方式利用数据时,您都必须编写新程序。使用经典设计,您只需在SQL中编写查询。

顺便说一下,我看到一个数据库里面有400个表格。但该数据库管理了中等规模大学的所有管理数据。从学生,课程,招生,成绩到校友捐赠,高中成绩单,体育赛事和停车位。你的问题几乎不复杂。

答案 3 :(得分:1)

这个问题无法回答,因为您没有提供最重要的信息:加载。有多少用户将使用此数据库?同样重要的是,您使用哪家公司来托管基础设施?

此外,编写得不好的代码会导致数据库效果不佳。

除此之外,为每个页面制作一些小的计时脚本。确定每个查询所花费的时间,然后将其乘以您期望拥有的用户数。如果您希望每秒有400个查询,那么诸如编写代码的方式以及用于托管基础结构的用户将非常重要。

答案 4 :(得分:1)

一些注意事项:

在多表方案中,随着产品/类别等的增长,您将需要不断添加越来越多的表,但它会使查找速度更快(较少记录的全表扫描)和查询更清晰,关系更清晰。

在双表方案中,它通常是自联接以获取数据,但查找可能会变慢,因为所有数据都将驻留在这几个表中。同样从个人经验来看,在同一张桌子中维持这么多代码和关系是很痛苦的,特别是当它成为n级亲子关系时。 Oracle有这样的情况解析SQL语法的关系,这使得查询更容易。但我认为MySQL缺乏它们..

如果我是你的话,所有事情都会考虑我会选择第一个结构。也许可以压扁一些孩子与父母之间的关系,但大多数都是保持原子性的。 (顺便说一句,我曾与400多个表一起使用过(遗留)MySQL数据库,所以我觉得你应该可以使用200多个表)