我有一个看起来像这样的表:
身份证 | 关键字 | 类别 | 子类别 | 子子类别 | 子子子类别
如果一个关键字只能属于一个类别,子类别...等,我是否需要将其拆分为两个表(一个关键字表和一个具有父 ID 的类别表)?意思是没有重复。还需要拆分吗?
我有一个看起来像这样的表:
身份证 | 关键字 | 类别 | 子类别 | 子子类别 | 子子子类别
如果一个关键字只能属于一个类别,子类别...等,我是否需要将其拆分为两个表(一个关键字表和一个具有父 ID 的类别表)?意思是没有重复。还需要拆分吗?
我会在两个表中执行此操作,每个外键都来自 Categories 表:
Keywords
id (PK)
keyword
category_id (FK)
Categories
category_id (PK)
category
parent_category_id (FK)
类别表中的数据如下所示:
category_id category parent_category_id
1 Food null
2 meat 1
3 organic 1
4 fruit 3
关键字表中的数据如下所示:
id keyword category_id
1 grapes 4
2 chicken 2
您只需要一张表来表示 1-1 映射。要表示 1-many 或 many-many 映射,您应该使用多个表。
如果一个关键词只能对应一个类/子类/子子类,你当前的布局应该没问题。
一个警告:如果您想根据关键字进行搜索,则分隔表格可能会提高性能。执行整数搜索要快得多。
将关键字值存储在另一个表中的讨论大致对应于将国家名称(大部分是静态的)存储在另一个表中的讨论。使用另一个表的一些关键优势可能是(口语)语言独立性、快速搜索以及以后易于更新。
我会使用这样的两个表。
Categories
-------------------
PK,FK1 | CategoryID
| Keyword
| Category
SubCategories
--------------------
PK,FK1 | CategoryID
PK,FK1 | SubCategoryID
如果您希望稍后重命名或重新排列类别,则将其拆分可能是有意义的:
权衡两者的利弊,然后做出决定。m
为什么不直接在 PK 中添加 ParentID 列和 FK?