【发布时间】:2011-11-17 03:55:24
【问题描述】:
我正在为一个项目创建一个数据库,但我对规范化如何应用于我的架构有点困惑。每次为客户批准贷款时,他们都有支票或 EFT 两种选择,所以我想知道贷款是支票还是 EFT。
这是我的 3 张桌子:
贷款
id_loan (PK)
product
amount
status
检查
id_check (PK)
id_customer
amount
电子转帐
id_eft (PK)
id_customer
amount
然后我创建了第 4 个表来建立贷款和货币处置之间的关系。
处置
id_payment (PK)
id_loan (FK loans)
id_disposal (FK checks or EFT)
disposal_type
在此表中,我存储贷款是否与支票或 EFT 相关,disposal_type 字段是具有两个可能值“check”或“EFT”的 varchar。 id_disposal 字段充当两个表的外键。
问题是我认为我的数据库没有使用这种结构进行标准化,对吗?解决这个问题的最佳方法是什么?
【问题讨论】:
-
您是否总是通过一张支票或一张电子转帐向获得贷款的人支付一笔款项?
-
不,有些贷款可能需要不止一张支票或电子转帐,甚至两者都需要
-
"id_disposal (FK checks or EFT)" -- 这是一个设计问题:您不能定义这样的 FK,因为 id_eft 和 id_customer 是不同的逻辑类型,即使它们恰好属于相同的 SQL 数据类型。您需要一个进一步的超类型表。 Google for SQL 子类化。但是,您的问题与规范化无关。
-
谢谢有一天我就是这样解决这个问题的
标签: sql sql-server-2008 normalization