我已经研究过这个问题。我不是唯一一个提出这个问题的人......但是我希望你对最佳做法有所想法。与类别和子类别相关的数据库设计
我试图设计一个数据库,将跟踪金融交易。为了简单起见,每笔交易只能有一个类别,每个类别只能有一个子类别。
我有一个自引用表,就像这样:
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