0

我的 mysql 中有一个名为“cats”的表,该表有“cat_id”、“cat_parent”、“cat_name”,我决定创建另一个名为“cats_details”的表,该表有“cat_id”、“cat_description”、“cat_keywords” ',等等,因为我的类别可以嵌套(每个主类别可以有无限数量的子类别,每个子类别可以有无限数量的子子类别,...)并且类别数量可能达到 1000 以上。我需要在某些页面中列出它们:P。所以我认为最好的方法是拥有 2 个表,一个用于列出类别并在其名称中搜索,另一个用于提供有关类别的详细信息。所以我的问题是这种情况下最好的方法是什么?

1-使用“cats_details”的“cat_id”作为其自身的主键和“cats”表的外键。

2-为“cats_details”的主键创建一个名为“id”(int auto increment)的列,在“cats_details”中创建一个名为“cat_id”的列作为“cats”表的外键。

对于大量类别和大量访问者,哪种解决方案更快?

注意:我只在类别详细信息页面中使用 JOIN,而不是在列表页面中。

4

2 回答 2

1

您期望的可扩展性数字是多少?您是否进行了任何初步的容量规划?

非规范化通过创建冗余数据来优化数据库的读取,但是如果不统一应用于数据库中数据的所有冗余副本,插入或删除可能会导致数据不一致(因此存在一些维护开销,因为维护数据一致性现在是应用程序的工作)。

除非您正在查看表中的数百万行,否则使用当前的硬件并不重要 - 规范化很好。

我假设 cat_id 是一个 int 或 Guid。主键将是一个聚集索引并使读取速度更快,因此选项 1 将导致更快的读取速度。由于您将主要通过主键进行读取/连接,因此选项 2 的效率较低,因为选项 2 中的 cat_id 很可能是非聚集索引(尽管在这种情况下插入/删除会更快)。

于 2012-12-12T16:17:03.657 回答
0

也许你应该看看表格的规范化。这应该可以解决您的问题。一个很好的链接可能是这个:http ://www.troubleshooters.com/littstip/ltnorm.html但是任何关于表规范化的谷歌搜索都应该对你有所帮助......

于 2012-12-12T14:44:38.423 回答