【发布时间】:2017-09-19 23:13:24
【问题描述】:
我无法将 RSS 提要中的数据标准化到数据库中。
每个帖子都有id 和categories。
我遇到的问题是categories 是一个未预定义大小的列表。通过 1NF,我应该拆分一个列表,以便每列只有原子数据:
+----+----------+
| id | name |
+----+----------+
| 1 | flying |
| 2 | swimming |
| 3 | throwing |
| 4 | sleeping |
| 5 | etc |
+----+----------+
但是,博客文章可以标记多个类别。这意味着posts 表可以有一个已标记类别的 id 列表。
或者,categories 表可以有两个 id:
+----+--------+----------+
| id | postId | name |
+----+--------+----------+
| 1 | 1 | flying |
| 2 | 1 | swimming |
| 3 | 1 | throwing |
| 4 | 2 | flying |
| 5 | 2 | swimming |
| 6 | 2 | etc |
+----+--------+----------+
而posts 表id 将引用postId 列。但是有重复的数据,不好。
最后,我想到的另一种方法是将所有类别放在一个表中:
+----+--------+----------+----------+----------+-----+
| id | flying | swimming | throwing | sleeping | etc |
+----+--------+----------+----------+----------+-----+
| 1 | 1 | 1 | 1 | 1 | 1 |
| 2 | 0 | 1 | 0 | 0 | 0 |
| 3 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0 | 0 | 1 | 1 | 1 |
+----+--------+----------+----------+----------+-----+
1s 代表出席,0s 代表出席,posts 表中的 id 引用 id。这种方法不会有任何重复的数据。但是,博客中的类别可以随意创建,因此很难维护这样的表,因为每次有新类别时我都需要更新它。
如何将我的数据库置于 3NF 中,在保持可维护性的同时消除重复?
【问题讨论】:
-
您没有清楚地解释您的表格。另外,您不是说“备用类别表” postId 引用 Posts 表ID,反之亦然;最后一个表 id 引用 Posts 表 id,反之亦然? (也许两者中的行与 Posts 中的行是 1:1 的?)(“参考”的意思是“只能有出现在的值”。)请: 1. 给每个表一个唯一的名称。 2. 举一个 Posts 表的例子。 3.在正确的方向使用“参考”。 4. 根据我的回答,对于每个表给出谓词(按列参数化的句子模板),该谓词由其中的行构成一个真实的语句。
标签: sql database-design rss rdbms database-normalization