规范化SQL数据库

时间:2011-09-14 15:44:26

标签: sql sql-server-2008 normalization

我正在为项目创建一个数据库,我对标准化如何应用于我的模式感到有些困惑。每次贷款被批准为客户,他们有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字段充当两个表的外键。

问题是我认为我的数据库没有使用这种结构进行规范化,我是对的吗?解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

你需要附带的东西。请注意,customer_loans表有点无关紧要,但是如果有任何与客户和贷款相关的列,而不是客户的贷款支付,那就是它可以去的地方。

Loans Schema

答案 1 :(得分:2)

在对象世界中,您将使用继承。将有一个基本类型的Disposal,CheckDisposal和EftDisposal将从中派生出来。现代O / RM支持几种将其映射到关系结构的技术。

TablePerHierarchy将所有记录放入具有鉴别器列的单个表中,以标识特定记录保存和映射到的类型。优点是它需要更少的连接才能获得记录。缺点是它需要应用程序逻辑来强制数据完整性。

TablePerType将记录映射到不同的表中,fk关系返回到基表。当然,这需要更多的连接(特别是对于深层次或宽层次),但可以在数据库中强制执行数据完整性。