两张桌子还是一张桌子?

use*_*742 1 sql database database-design data-modeling

关于桌子设计的快速问题..

假设我正在设计贷款申请数据库.就像现在一样,我将有2张桌子..

申请人(ApplicantID,FirstName,LastName,SSN,Email ...)和

共同申请人(CoApplicantID,FirstName,LastName,SSN,Email ..,ApplicantID)

我应该考虑只有一个表,因为所有的字段是相同的.. ??

(PersonID,FirstName,LastName,SSN,Email ...,ParentID(这决定了它是否是共同申请人))

这两种方法的优点和缺点是什么?

OMG*_*ies 6

我建议使用以下数据模型:

PERSON

  • PERSON_ID,PK

LOAN_APPLICATIONS

  • APPLICATION_ID,PK

APPLICANT_TYPE_CODE

  • APPLICANT_TYPE_CODE,PK
  • APPLICANT_TYPE_CODE_DESCRIPTION

LOAN_APPLICANTS

  • APPLICATION_ID,PK,fk
  • PERSON_ID,PK,fk
  • APPLICANT_TYPE_CODE,fk

人(PersonID,FirstName,LastName,SSN,Email ...,ParentID(这决定了它是否是共同申请人))

如果一个人将只能永远在您的系统既可以是申请人或共同申请人.一个人可以是众多贷款的共同申请人和/或申请人本人 - 您不希望每次都重新输入他们的详细信息.

这是事物规范化的方式和原因的好处.根据业务规则和使用的固有现实,设置表以停止存储冗余数据.这是由于以下原因:

  1. 冗余数据浪费了空间和资源来支持和维护
  2. 复制数据的行为意味着它也可能以微妙的方式不同 - 大写,空间等,这些都可能导致复杂化以隔离真实数据
  3. 创建数据模型时,由于疏忽而导致数据存储不正确
  4. 前瞻性和灵活性.目前,除了申请人或共同申请人之外,没有任何其他选择APPLICANT_TYPE_CODE- 它可以是在不使用其他表和外键的情况下存储的.但是,此设置允许支持在将来根据需要添加不同的申请人代码 - 而不会对数据模型造成任何损害.

风险不佳时,没有性能优势.你会做什么,将被你必须执行的黑客吃掉才能让事情发挥作用.