我有许多需要跟踪的帐户。这些帐户都非常相似,例如:
account_number, date_opened, current_expenditure etc.
现在,这些帐户有三种类型(我们称之为A,B,C型) 这些帐户类型中的每一种都需要至少一个其他字段,该字段对于其类型是唯一的。例如:
Type A: account_number, date_opened, current_expenditure, owner
Type B: account_number, date_opened, current_expenditure, location
Type C: account_number, date_opened, current_expenditure, currency
我的问题是我是否应该将这些组合成一个大表,其中一列表示帐户类型(将不相关的字段留空):
Table 1: accounts
Table 2: accts_emp_maps
Account Columns:
account_number, type, date_opened, current_expenditure, owner, location, currency
或者,我应该为每个帐户类型设置一个单独的表吗?请记住,将有其他表将员工映射到这些帐户。如果我将帐户分成不同的类型,我也需要拆分地图。 IE:
Table 1: A_accounts
Table 2: A_accts_emp_maps
Table 3: B_accounts
Table 4: B_accts_emp_maps
Table 5: C_accounts
Table 6: C_accts_emp_maps
答案 0 :(得分:1)
我会选择带有owner, location, currency
额外列的单表方法。它会让你的生活更轻松。
如果它太大,您可以按类型对其进行分区。
答案 1 :(得分:1)
经典地,您可以使用超级键/子类型模式来确保只有一个所有者,位置,货币
现在,在这种情况下,我会考虑使用冗余列来简化
示例:
答案 2 :(得分:-1)
在你列出的两个选项中,我肯定会选择第一个。它适用于大多数应用程序,并且表格可以更简单地手动查询。 (第二个提议的设计在三组账户表中复制了大量信息)。
但是,根据您的需要,可能更好的more normalized数据库设计是这样的:
Table: accounts
===============
number, type, date_opened, current_expenditure
Table: account_owners
=====================
account_number, owner
Table: account_currencies
=========================
account_number, currency
Table: account_locations
========================
account_number, location