0

我有很多需要跟踪的帐户。这些帐户都非常相似,具有以下字段:

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
4

3 回答 3

1

我会选择一张表的方法,带有owner, location, currency额外的列。它会让你的生活更轻松。

如果它变得太大,您可以按类型对其进行分区。

于 2012-06-12T13:33:44.207 回答
1

经典地,您可能会为此使用超级键/子类型模式来确保只有所有者、位置、货币之一

  • 一个包含公共列和类型列的表
  • PK + 类型(A、B 或 C)列上的唯一超级键
  • 三个带有 PK + 类型键的子表。这是您添加特定列的地方
  • 检查子类型约束的约束以限制子表中的 A、B 或 C

现在,在这种情况下,为了简单起见,我会考虑使用冗余列

例子:

于 2012-06-12T13:36:53.990 回答
-1

在您列出的两个选项中,我肯定会选择第一个。这对大多数应用程序来说都很好,并且手动查询表会更简单。(第二个提议的设计在三组帐户表中重复了很多信息)。

但是,根据您的需要,可能更好的更规范化的数据库设计是这样的:

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
于 2012-06-12T13:34:45.923 回答