首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >规范化SQL数据库

规范化SQL数据库
EN

Stack Overflow用户
提问于 2011-09-14 15:44:25
回答 2查看 637关注 0票数 3

我正在为一个项目创建一个数据库,我对规范化如何应用于我的模式感到有点困惑。每次为客户提供贷款时,他们都有两种选择--支票或EFT,所以我想知道贷款是支票还是EFT。

这是我的三张桌子:

Loans

代码语言:javascript
复制
id_loan (PK)
product
amount 
status

检查

代码语言:javascript
复制
id_check (PK)
id_customer
amount

EFT

代码语言:javascript
复制
id_eft (PK)
id_customer
amount

然后,我创建了第四张表格,以建立贷款和资金处置之间的关系。

处置

代码语言:javascript
复制
id_payment (PK)
id_loan (FK loans)
id_disposal (FK checks or EFT)
disposal_type

在这个表中,我存储贷款是与支票有关还是与EFT有关,disposal_type字段是一个varchar,有两个可能的值" check“或"EFT”。id_disposal字段充当两个表的外键。

问题是,我认为我的数据库没有按照这个结构进行规范化,对吗?解决这个问题最好的办法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-14 15:55:52

你需要像附件这样的东西。请注意,customer_loans表是一种额外的和过度的,但是如果有任何与客户和贷款相关的列,而不是客户的贷款支付,那就是它的去处。

票数 2
EN

Stack Overflow用户

发布于 2011-09-15 01:53:06

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

TablePerHierarchy将所有记录放入一个带有判别器列的表中,以确定特定记录持有和映射到哪种类型。优点是它需要更少的连接才能获得记录。缺点是它需要应用程序逻辑来执行数据完整性。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7419160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档