Database 从1NF到3NF的归一化
如果我有下表,当前在1NF中: 我需要将此表分解为3NF 然后我会(如果我错了,请纠正我): 我需要什么帐户详细信息?我的想法是:Database 从1NF到3NF的归一化,database,database-normalization,Database,Database Normalization,如果我有下表,当前在1NF中: 我需要将此表分解为3NF 然后我会(如果我错了,请纠正我): 我需要什么帐户详细信息?我的想法是: Account Details (Account Number, Customer ID, Branch ID, Account Type, Account Balance) 由于一个帐号上有多个客户,我一直在思考如何制作这个主表的主键 我是否需要使用带有帐号和分支机构ID的复合主键 我还有什么其他/更好的选择吗?您可以按如下方式创建结构 Customer(Cu
Account Details (Account Number, Customer ID, Branch ID, Account Type, Account Balance)
由于一个帐号上有多个客户,我一直在思考如何制作这个主表的主键
我是否需要使用带有帐号和分支机构ID的复合主键
我还有什么其他/更好的选择吗?您可以按如下方式创建结构
Customer(Customer ID-PK, Customer Name)
Branch(Branch ID-PK, Branch Name, BSB)
Account(Account ID-PK, Account Number, Account Name, Branch ID, Account Type, Account Balance)
Account_Customer ( Account_Customer_id-PK, Account id, Customer ID)
您必须将账户相关信息保存在一个位置,即账户表本身。
此外,对于Account_Customer,您可以添加活动标志或开始日期和结束日期,以保持更多与客户和帐户相关的信息正如您所提到的,一个帐户有多个客户。您是否还有其他标准,例如一个客户可以拥有多个帐户? 如果是这种情况,那么您必须使用多对多关系进行设计。 差不多
Customer(PK, CustomerName)
Account(PK,AccountId,...)
AccountMapping(PK,(Account.PK/Customer.PK) AS FOR,(Account.PK/Customer.PK) AS TO)
我假设被建模的组织是一家银行 给定示例数据,分支ID、分支名称和BSB似乎都与特定分支关联,并且每列都是候选键(可以是“主键”) 3NF表之一应为:
Branch: Branch ID, Branch Name, BSB — Branch ID nominated as PK
Customer: Customer ID, Customer Name — Customer ID nominated as PK
Account: Account Number, Branch ID, Account Type, Account Balance, Account Type, Account Name
— PK(Account Number, Branch ID)
每个客户只记录两位数据:客户名称和客户ID。由于名称可以重复,我们将假定客户ID是候选密钥
3NF表之一应为:
Branch: Branch ID, Branch Name, BSB — Branch ID nominated as PK
Customer: Customer ID, Customer Name — Customer ID nominated as PK
Account: Account Number, Branch ID, Account Type, Account Balance, Account Type, Account Name
— PK(Account Number, Branch ID)
鉴于前两个数据行和最后一个数据行都标识了a/c 9047 1234,但账户类型信息不同,因此银行中的所有分行的a/c编号都不是唯一的。根据显示的数据,账号和分行ID的组合应该是唯一的(因此PK也是唯一的)。但是,一个给定的帐户可以由多个客户共享—请看前两行数据
因此,3NF表之一应为:
Branch: Branch ID, Branch Name, BSB — Branch ID nominated as PK
Customer: Customer ID, Customer Name — Customer ID nominated as PK
Account: Account Number, Branch ID, Account Type, Account Balance, Account Type, Account Name
— PK(Account Number, Branch ID)
另一个应该跟踪与给定帐号关联的客户。同样,所示的表是“所有键”,其中账号
和分行ID
构成一个外键,客户ID
是另一个外键
Account_Customers: Customer ID, Account Number, Branch ID
所以,我想你需要4张桌子。主键列用星号标记
- 分支机构:分支机构ID*,分支机构名称,BSB
- 客户:客户ID*,客户名称
- 账户:账号*、分行ID*、账户类型、账户余额、账户类型、账户名称
- 账户\客户:客户ID*、账号*、分行ID*
账户的主键中需要,并且您也必须担心账户/客户表中的主键。我怀疑不同分支机构之间是否重复了账号,因为我可以看到同一账号9047 1234有两种账户类型。我认为这完全取决于业务逻辑,这里没有解释。我们是否同意前两条数据线和最后一条数据线具有相同的账号,但不同的分行信息、不同的客户信息以及不同的账户类型和余额信息?如果没有,我们就有大问题。假设我们同意这一点,那么我的解释是,账户号码在“银行”(其数据正在建模的组织)中不是唯一的——但是,根据所示数据,“分行ID”和“账户号码”的组合在整个银行中是唯一的。帐户的唯一密钥可能有其他标准;这个很简单。根据我在这里的理解,AccountNumber不足以唯一标识帐户。我不得不将其与BSB或BranchID结合,但这仍然存在一个帐户有多个持有人(客户)的问题。使用AccountNumber、BranchID和CustomerID的复合PK可以吗?我认为不应该使用复合PK,而应该使用帐户和帐户客户链接的代理键,以便您可以根据帐户编号和分支ID区分每个帐户记录。该表是我得到的所有内容,我被要求将其制作成3NF。我们被期望使用所给的知识和常识。只要我清楚地陈述,我就可以做出假设。