【问题标题】:Multi category database schema with repeated data具有重复数据的多类别数据库架构
【发布时间】:2013-11-12 10:55:32
【问题描述】:
这是所涉及的数据,
这是我想出的架构
范围
身份证
名称(例如:地区...)
类别
身份证,
名称(例如:资源),
scope_id
子类别
身份证,
名称(例如:合法的、赞助的……),
category_id
问题是,如您所见,由于同一类别出现在所有范围下,相同的子类别出现在所有类别下,因此存在大量重复数据。当然,案例中会有一些独特的价值,但它们很少。此外,即使类别/子类别的名称相同,它们也会根据其父范围/类别持有对不同数据集的引用。这将用于分离内容并生成菜单以浏览这些内容。我想知道的是,这是否是解决此问题的正确方法,或者任何人都可以建议我有更好的方法/模式?
【问题讨论】:
标签:
mysql
database-schema
【解决方案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 |
| .. | ........... |
+----+-------------+