我正在为一个项目创建一个数据库,我对规范化如何应用于我的模式感到有点困惑。每次为客户提供贷款时,他们都有两种选择--支票或EFT,所以我想知道贷款是支票还是EFT。
这是我的三张桌子:
Loans
id_loan (PK)
product
amount
status检查
id_check (PK)
id_customer
amountEFT
id_eft (PK)
id_customer
amount然后,我创建了第四张表格,以建立贷款和资金处置之间的关系。
处置
id_payment (PK)
id_loan (FK loans)
id_disposal (FK checks or EFT)
disposal_type在这个表中,我存储贷款是与支票有关还是与EFT有关,disposal_type字段是一个varchar,有两个可能的值" check“或"EFT”。id_disposal字段充当两个表的外键。
问题是,我认为我的数据库没有按照这个结构进行规范化,对吗?解决这个问题最好的办法是什么?
发布于 2011-09-14 15:55:52
你需要像附件这样的东西。请注意,customer_loans表是一种额外的和过度的,但是如果有任何与客户和贷款相关的列,而不是客户的贷款支付,那就是它的去处。

发布于 2011-09-15 01:53:06
在对象世界中,您将为此使用继承。CheckDisposal和EftDisposal将从中派生出一个基本类型处理。现代的O/RMs支持将其映射到关系结构的几种技术。
TablePerHierarchy将所有记录放入一个带有判别器列的表中,以确定特定记录持有和映射到哪种类型。优点是它需要更少的连接才能获得记录。缺点是它需要应用程序逻辑来执行数据完整性。
TablePerType将记录映射到具有fk关系的不同表中,返回到基表。当然,这需要更多的连接(特别是对于深层次结构或宽层次结构),但是数据完整性可以在DB中强制执行。
https://stackoverflow.com/questions/7419160
复制相似问题