设计具有层次结构/子类别的SQL表

chi*_*ips 5 sql normalization categorization

我有一个看起来像这样的表:

ID | 关键字| 类别| 子类别| 子分类| 分分分类别

如果一个关键字只能属于一个类别,子类别等,我是否需要将其拆分为两个表(关键字表和具有父ID的类别表).意思是没有重复.还有需要拆分吗?

ros*_*533 6

我在两个表中执行它,每个外键来自Categories表:

Keywords 
id (PK)
keyword
category_id (FK)

Categories
category_id (PK)
category
parent_category_id (FK)
Run Code Online (Sandbox Code Playgroud)

Categories表中的数据如下所示:

category_id    category    parent_category_id
1              Food        null
2              meat        1
3              organic     1
4              fruit       3
Run Code Online (Sandbox Code Playgroud)

关键字表中的数据如下所示:

id     keyword    category_id
1      grapes     4
2      chicken    2
Run Code Online (Sandbox Code Playgroud)


Mar*_*iot 5

您只需要一个表来表示1-1映射.要表示1-many或many-many映射,应使用多个表.

如果关键字只能对应一个类别/子类别/子子类别,那么您当前的布局应该没问题.

需要注意的一点是:如果您想基于关键字进行搜索,则可以在分离表格时获得性能提升.执行整数搜索要快得多.

将关键字值存储在另一个表中的讨论粗略地对应于在另一个表中存储国家名称(大多数是静态的)的讨论.使用另一个表的一些关键优势可能是(口语)语言独立性,快速搜索以及以后易于更新等.