我已經研究過這個問題。我不是唯一一個提出這個問題的人......但是我希望你對最佳做法有所想法。與類別和子類別相關的數據庫設計
我試圖設計一個數據庫,將跟蹤金融交易。爲了簡單起見,每筆交易只能有一個類別,每個類別只能有一個子類別。
我有一個自引用表,就像這樣:
Table: Categories
ID, int, primary key
parentID, int, foreign key
description, text
長話短說,你最終得到這樣的數據:
1 Auto [null]
2 Bills [null]
3 Healthcare [null]
4 Maintenance 1
5 Gasoline 1
6 Cell Phone 2
7 Rent 2
8 Prescriptions 3
9 Dentist 3
到目前爲止,一切都很好。 這裏是我的問題:
我不知道我應該涉及所有這一切回到我的交易表的正確方法。 'Transactions'有一個'Category'和'Subcategory'的列。 Transaction.ID將是PK,而Categories.ID將是FK。
隨着上述規定的方式,這意味着從分類的任何值可以被寫入類別或子類別相關的分類交易...
這是我的責任,程序員通過控制訪問表形成?換句話說,我唯一的選擇是「以編程方式控制」進入「類別」和「子類別」列的內容。
請記住,每個類別只能有一個子類別。選擇的類別應該只允許該類別的孩子...
我有道理嗎?
GOOD:汽車 - 維護 BAD:醫療保健 - 汽油
...爲什麼你只能有一個子類?這是否意味着像「汽油 - 汽油」這樣的東西會被禁止?或者你的意思是你只想要一個嵌套層次? 'Transactions'應該只有一列 - 'category',它可能包含一個子類別。或者,或者定義一個多列外鍵。你如何預測加載數據?該程序/過程有責任首先不加載不良數據,因此請將所需的任何基本保護放在那裏。 –
你的意思是說每個子類別只能有一個類別? –
目前,我並不太在意層次結構的深度......每個子類別可能只有一個父級。這部分很簡單...我的問題是限制寫入交易表的內容。例如:如果我使用「自動」填充Transactions.Category,那麼當我到達Transaction.SubCategory時,我應該只能選擇自動的孩子。 – raydlevel5