5

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

身份证 | 关键字 | 类别 | 子类别 | 子子类别 | 子子子类别

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

4

5 回答 5

6

我会在两个表中执行此操作,每个外键都来自 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
于 2010-01-22T23:02:05.463 回答
5

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

如果一个关键词只能对应一个类/子类/子子类,你当前的布局应该没问题。

一个警告:如果您想根据关键字进行搜索,则分隔表格可能会提高性能。执行整数搜索要快得多。

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

于 2010-01-22T22:07:22.363 回答
1

我会使用这样的两个表。

   Categories
-------------------
PK,FK1 | CategoryID
       | Keyword 
       | Category 

  SubCategories
--------------------
PK,FK1 | CategoryID
PK,FK1 | SubCategoryID
于 2010-01-22T22:11:31.760 回答
1

如果您希望稍后重命名或重新排列类别,则将其拆分可能是有意义的:

  • 如果您保持原样,则必须为此表中包含的每一行执行重命名/重组步骤(更改类别/子类别/子子类别/子子类别字段)那个 (((sub)sub)sub) 类别。这会导致更复杂的查询,并且如果此关键字表中有很多行,则可能是性能问题(=数据库需要一段时间);另一方面,查询(阅读)将尽可能快。
  • 如果将其拆分,则更新 (((sub)sub)sub)category 只会对更少的行进行,但查询(读取)将花费更长的时间,因为它必须与两个(或更多)表一起使用。

权衡两者的利弊,然后做出决定。m

于 2010-01-22T22:12:12.133 回答
1

为什么不直接在 PK 中添加 ParentID 列和 FK?

于 2010-01-22T22:30:54.040 回答