如果我有当前位于1NF中的下表:
我需要将此表分解为3NF。
然后我会得到(如果我错了,请纠正我):
Customer(Customer ID-PK, Customer Name)
Branch(Branch ID-PK, Branch Name, BSB)
Account(Account Type-PK, Account Name)
我需要什么帐户详细信息?我在想类似的东西:
Account Details (Account Number, Customer ID, Branch ID, Account Type, Account Balance)
由于在一个帐号上有多个客户,因此我难以确定该主表的主键。
我是否需要使用带有帐号和分支ID的复合主键?
我在这里还有什么其他/更好的选择?
答案 0 :(得分:0)
您可以创建如下结构,
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,您可以添加活动标记或从&到日期,以保持更多与客户和帐户相关的信息
答案 1 :(得分:0)
您提到过,一个帐户有很多客户。您是否还有其他条件,例如一个客户可以拥有多个帐户? 如果是这种情况,则必须设计具有多对多关系的设计。 像
Customer(PK, CustomerName)
Account(PK,AccountId,...)
AccountMapping(PK,(Account.PK/Customer.PK) AS FOR,(Account.PK/Customer.PK) AS TO)
答案 2 :(得分:0)
我假设要建模的组织是一家银行。
鉴于示例数据,看来分支ID,分支名称和BSB都与特定分支相关联,并且每个列都是候选键(可以是“主键”)。
3NF表之一应该是:
Branch: Branch ID, Branch Name, BSB — Branch ID nominated as PK
每个客户仅记录两位数据:客户名称和客户ID。由于名称可以重复,因此我们假设客户ID是候选键。
3NF表之一应该是:
Customer: Customer ID, Customer Name — Customer ID nominated as PK
鉴于前两个数据行和最后一个都标识a / c 9047 1234,但帐户类型信息不同,因此银行中所有分支机构的a / c编号都不唯一。根据显示的数据,帐号和分支机构ID的组合应该是唯一的(因此是PK)。但是,一个给定的帐户可以由多个客户共享-见证前两行数据。
因此,3NF表之一应为:
Account: Account Number, Branch ID, Account Type, Account Balance, Account Type, Account Name
— PK(Account Number, Branch ID)
另一个应跟踪与给定帐号关联的客户。同样,显示的表是“所有键”,其中Account Number
和Branch ID
构成一个外键,而Customer ID
是另一个外键。
Account_Customers: Customer ID, Account Number, Branch ID
所以,我认为您需要4张桌子。主键列标有星号。