Python DB一个表用于类别,另一个表用于具有类似字段的子类别,为什么?

Python DB一个表用于类别,另一个表用于具有类似字段的子类别,为什么?,python,mysql,database,django,performance,Python,Mysql,Database,Django,Performance,我最近加入了一家新公司,开发团队正在进行一个重建数据库类别结构的项目,如下所示: 如果我们有物品的类别和子类别,比如食品类别中的食品类别和意大利食品类别。 他们正在为每个类别构建一个表,而不是一个表和一个指向类别id的链接 现在我们有一张桌子叫食物 还有另一张桌子叫意大利美食 两个表包含相同的字段 我四处询问过,似乎有些DBA更喜欢这种设计。我想知道为什么?这种设计如何提高性能?首先,最明显的答案是,你应该问他们,而不是我们,因为我可以告诉你,这种设计似乎是假的 我能想到的唯一原因是,您没有经验

我最近加入了一家新公司,开发团队正在进行一个重建数据库类别结构的项目,如下所示:

如果我们有物品的类别和子类别,比如食品类别中的食品类别和意大利食品类别。 他们正在为每个类别构建一个表,而不是一个表和一个指向类别id的链接

现在我们有一张桌子叫食物 还有另一张桌子叫意大利美食 两个表包含相同的字段


我四处询问过,似乎有些DBA更喜欢这种设计。我想知道为什么?这种设计如何提高性能?

首先,最明显的答案是,你应该问他们,而不是我们,因为我可以告诉你,这种设计似乎是假的

我能想到的唯一原因是,您没有经验的DBA不知道如何对数据库进行性能调优,并且似乎认为行数较少的表总是比行数较多的表的性能好得多


有了好的指数,情况就不一定如此了。

做任何事情的方法不止一种


我看到的可能的好处是做食物,意大利食物。。。是因为它允许。如果您使用myisam,使用许多不同的表可以提供更好的表锁定机制。

谢谢您的回复,我已经问过他们了,但答案似乎不合理,这就是我来这里的原因。答案是,通过减少加入表的数量,我们将在获取行时获得性能。因为我们有成千上万的访问者在网站上进行发布和搜索。我所能想到的方法是,有一个带有fk的类别表,它本身具有无限的类别深度,然后有另一个带有类别元的表,以防我们需要为某些类别提供更多字段。他们使用phinx,我们可以使用lucene进行搜索。在我结束之前,评论已经结束了对不起-我想说的更多,我正在尝试收集数据库性能方面的一些事实,以将我在之前的评论中描述的内容与开发人员正在做的事情进行比较。更值得考虑的问题是,另一家真正的大公司DBA决定在他们的数据库上做同样的事情。我在挖掘时听到了这个消息。但我联系不到他问他为什么。较少的联接将提高性能,这有意义吗?是的,较少的联接将提高性能,但是像这样对表进行分区将是维护的噩梦。所以,这一切都取决于你关注的是什么。它能在多大程度上影响性能?我能在什么地方找到号码吗?每种设计的查询时间(以毫秒为单位)不,这取决于除与服务器、数据和查询一起运行的分析工具之外的任何人所能提供的太多因素。恐怕这里没有确凿的事实。我可以保证,这将是一场维护噩梦,尤其是如果你后来决定“树上的水果有一个属性,它决定了它们的生长高度,但灌木上的水果不需要,所以让我们让桌子在结构上有所不同。”