【问题标题】:How to organize this in a mysql table?如何在 mysql 表中组织这个?
【发布时间】:2010-12-18 00:51:42
【问题描述】:

我有一些项目,每个项目都有一个类别和一个子类别。在 mysql 中组织这个的最好方法是什么?

【问题讨论】:

  • 显示你当前的代码,你尝试过的,看起来你只是想让我们为你做,没有任何尝试。
  • 我现在什么都没有......
  • 我的第一个想法是每行添加两列,一个用于猫和子猫,但我认为这不是最优化的方式......
  • 尝试一下,然后告诉大家你尝试了什么以及你卡在哪里。
  • 没有任何上下文、数据库类型、目的或数据,您将无法获得“最佳方式”,有太多可能性

标签: php mysql optimization


【解决方案1】:

创建一个表

catID 
CategoryName 
ParentCategory ....any other fields

父类别列将存储父类别的catID(如果有)。 或

CategoryTable
catID
CategoryName

CategoryRel Table
----------------------------------
ID
catID
SubcatID

其中 catID 和 subCatID 是类别表中的 ID。

【讨论】:

  • 第一个例子还可以。它允许多个级别,只需要一张桌子。第二种比较复杂,不合理。
  • @s3v3n 是的,第二个很复杂,但有些人可能会说第一个没有标准化?
  • 使用它如何显示主要类别中的每个项目?
  • 假设您选择第一个示例,您的 items 表还将有一个外部字段 - 类别 ID。所有第一级类别都将具有 parent=0 要从类别 x 中选择所有项目,您只需在 category=x 的项目表上进行简单的选择第一个示例在使用多个级别时确实会出现一些问题。
【解决方案2】:

首先,您要做出一个重大决定。你会设计你的数据库以便只有两个级别的类别吗?或者您将来会允许两个以上的级别吗?

如果您愿意接受类别和子类别的永久限制,您可以添加两个表。类别将列出允许的类别。子类别将列出允许的子类别及其所属的类别。您的数据表将仅包含子类别。 (如果除了名称之外没有关于类别的信息,您可以省略类别表,只需在子类别表中包含类别名称。)

如果您想允许任意数量的级别,您将只有一个类别表。每行都将具有类别名称和具有父类别的另一列。您的数据表仍将包含一个类别列。

【讨论】:

    【解决方案3】:
    categories
    -----------
    id
    title
    description
    
    subcategories
    -------------
    id
    title
    description
    category_id
    
    items
    -----------
    id (*i had misspelled id as 'if'. corrected it here)
    title
    description
    subcategory_id
    

    【讨论】:

    • 你将如何存储:工程-> 硬件-> DIY 工具
    • @Taz ;我没有考虑这一点,因为它没有被指定,但可以将“child_id”添加到子类别表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2022-07-26
    • 1970-01-01
    • 2012-04-21
    • 2019-05-27
    相关资源
    最近更新 更多