我正在为项目创建一个数据库,我对标准化如何应用于我的模式感到有些困惑。每次贷款被批准为客户,他们有2个选项支票或电子转帐,所以我想知道贷款是支票还是电子转帐。
这是我的3张桌子:
贷款
id_loan (PK)
product
amount
status
检查
id_check (PK)
id_customer
amount
EFT
id_eft (PK)
id_customer
amount
然后我创建了第4张表来建立贷款和资金处理之间的关系。
处置
id_payment (PK)
id_loan (FK loans)
id_disposal (FK checks or EFT)
disposal_type
在此表中,我存储贷款是否与支票或EFT相关,dispos_type字段是具有两个可能值“check”或“EFT”的varchar。 id_disposal字段充当两个表的外键。
问题是我认为我的数据库没有使用这种结构进行规范化,我是对的吗?解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
你需要附带的东西。请注意,customer_loans表有点无关紧要,但是如果有任何与客户和贷款相关的列,而不是客户的贷款支付,那就是它可以去的地方。
答案 1 :(得分:2)
在对象世界中,您将使用继承。将有一个基本类型的Disposal,CheckDisposal和EftDisposal将从中派生出来。现代O / RM支持几种将其映射到关系结构的技术。
TablePerHierarchy将所有记录放入具有鉴别器列的单个表中,以标识特定记录保存和映射到的类型。优点是它需要更少的连接才能获得记录。缺点是它需要应用程序逻辑来强制数据完整性。
TablePerType将记录映射到不同的表中,fk关系返回到基表。当然,这需要更多的连接(特别是对于深层次或宽层次),但可以在数据库中强制执行数据完整性。