我在將RSS源中的數據標準化爲數據庫時遇到了問題。組織和規範化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 |
+----+--------+----------+----------+----------+-----+
1
代表中國出席並0
代表中國缺席,在posts
表id
引用id
。這種方法不會有任何重複的數據。但是,可以隨意創建博客類別,這使得維護這樣的表格變得很困難,因爲每次有新類別時我都需要更新它。
如何將我的數據庫放入3NF,消除重複同時保持可維護性?
你沒有清楚地解釋你的表格。此外,你是不是指「替代類別表」postId引用帖子表ID,反之亦然;並且最後一個表id引用Posts表id,而不是反之呢? (也許行中的行與Post中的行是1:1)(「References」意思是「只能有值出現在」中)。請:1.給每個表一個唯一的名字。 2.給一個帖子表格的例子。 3.在正確的方向使用「參考」。 4.根據我的回答,對於每個表格*給出謂詞(按列參數化的句子模板),根據其中的行將其變爲真語句。 – philipxy