【发布时间】:2014-07-18 18:48:07
【问题描述】:
我对此进行了无止境的研究。我不是唯一一个问过这个问题的人......但我希望您能对最佳做法提出意见。
我正在尝试设计一个可以跟踪金融交易的数据库。为简单起见,每笔交易只能有一个Category,每个Category只能有一个Sub-category。
我有一个自引用表,如下所示:
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
到目前为止,一切都很好。 这是我的问题:
我不知道我应该以正确的方式将这一切与我的交易表联系起来。 “交易”有一个“类别”和“子类别”列。 Transaction.ID 是 PK,Categories.ID 是 FK。
对于以上述方式与类别相关的事务,这意味着类别中的任何值都可以写入类别或子类别...
作为程序员,我有责任通过表单控制对表格的访问吗?换句话说,我唯一的选择是“以编程方式控制”类别和子类别列中的内容吗?
请记住,每个类别只能有一个子类别。所选类别应仅允许该类别的子级...
我说得有道理吗?
良好:自动 -- 维护 不好:医疗保健——汽油
【问题讨论】:
-
...为什么只能有一个子类别?这是否意味着像
Auto - Gasoline这样的东西会被禁止?或者你的意思是你只想要一个嵌套级别?Transactions应该只有一列 -category,它可能包含一个子类别。要么,要么定义一个多列外键。您预计如何加载数据?该程序/进程有责任首先不加载不良数据,因此在此处放置您需要的任何基本保护。 -
你的意思是每个子类别只能有一个类别吗?
-
目前,我不太关心层次结构有多深...每个子类别可能只有一个父级。这部分很简单......我的问题是限制写入 Transactions 表的内容。例如:如果我用“Auto”填充 Transactions.Category,我应该只能在到达 Transactions.SubCategory 时选择 Auto 的孩子。
标签: sql database-design ms-access-2010 database-schema