具有重复数据的多类别数据库模式

时间:2013-11-12 10:55:32

标签: mysql database-schema

这是涉及的数据,

enter image description here

这是我提出的架构

范围

ID 名称(例如:区域......)

分类

ID, 名称(例如:资源), scope_id

子类别

ID, 名称(例如:合法,赞助......), CATEGORY_ID

问题是,正如您所看到的,有很多重复数据,因为同一类别出现在所有范围内,相同的子类别出现在所有类别下。当然,在这种情况下会有一些独特的价值,但它们很少。此外,即使类别/子类别的名称相同,它们也将根据其父范围/类别保留对不同数据集的引用。这将用于隔离内容并生成菜单以浏览这些内容。我想知道的是,如果这是解决这个问题的正确方法,或者有更好的方法/模式,任何人都可以建议我?

1 个答案:

答案 0 :(得分:1)

根据您提供的有限信息,这就是我要做的事情:

categories
    id                  unsigned int(P)
    name                varchar(15)

+----+-----------+
| id | name      |
+----+-----------+
|  1 | Assets    |
|  2 | Resources |
| .. | ......... |
+----+-----------+

categories_subcategories
    id                  unsigned int(P)
    category_id         unsigned int(F categories.id)
    subcategory_id      unsigned int(F subcategories.id)

+----+-------------+----------------+
| id | category_id | subcategory_id |
+----+-------------+----------------+
|  1 |           1 |              4 |
|  2 |           1 |              1 |
| .. | ........... | .............. |
+----+-------------+----------------+

levels
    id                  unsigned int(P)
    name                varchar(15)

+----+----------+
| id | name     |
+----+----------+
|  1 | National |
|  2 | Regional |
|  3 | Zonal    |
| .. | ........ |
+----+----------+

levels_categories
    id              unsigned int(P)
    level_id        unsigned int(F levels.id)
    category.id     unsigned int(F category.id)

+----+----------+-------------+
| id | level_id | category_id |
+----+----------+-------------+
|  1 |        1 |           1 |
|  2 |        1 |           2 |
| .. | ........ | ........... |
+----+----------+-------------+

subcategories
    id                  unsigned int(P)
    name                varchar(15)

+----+-------------+
| id | name        |
+----+-------------+
|  1 | Contributed |
|  2 | Financial   |
|  3 | Legal       |
|  4 | Sponsored   |
| .. | ........... |
+----+-------------+