关于桌子设计的一个简单问题..
假设我正在设计贷款申请数据库。 就像现在一样,我将有2张桌子..
申请人(ApplicantID,FirstName,LastName,SSN,Email ...) 和
共同申请人(CoApplicantID,FirstName,LastName,SSN,Email ..,ApplicantID)
我应该考虑只有一个表,因为所有字段都相同.. ??
人(PersonID,FirstName,LastName,SSN,Email ...,ParentID(这决定了它是否是共同申请人))
这两种方法的优点和缺点是什么?
答案 0 :(得分: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(这决定了它是否是共同申请人))
如果一个人只有 曾 作为申请人或共同申请人存在于您的系统中。一个人可以是众多贷款和/或申请人本人的共同申请人 - 您不希望每次都重新输入他们的详细信息。
这是如何&为什么事情正常化了。根据业务规则和使用的固有现实,表格设置,以便停止存储冗余数据。这是出于以下原因:
APPLICANT_TYPE_CODE
价值的任何选项 - 它可以在不使用其他表格的情况下存储。外键。但是,此设置允许支持在将来根据需要添加不同的申请人代码 - 而不会对数据模型造成任何损害。风险不佳时,没有性能优势。你会做什么,将被你必须执行的黑客吃掉才能让事情发挥作用。
答案 1 :(得分:4)
如果域模型确定这两个人都是申请人并且是相关的,那么他们就属于同一个表中,并带有自我引用的外键。
答案 2 :(得分:1)
您可能需要阅读database normalization。
我认为你应该有两张桌子,但不是那两张桌子。有一张表“贷款”,其中有申请人表的外键,或只是申请人的记录参考同一张表。
答案 3 :(得分:1)
优点: - 使搜索更容易:如果您只有电话号码或姓名,您仍然可以在一张表中搜索并找到相应的人,无论他/她是共同申请人还是主申请人。否则,您需要使用UNION构造。 (但是,当您知道搜索特定类型的申请人时,您会在类型上添加过滤器,而您只会获得此类申请人。 - 通常更容易维护。说明天你需要添加申请人的高音扬声器ID ;-),只有一个地方可以改变。 - 还允许输入具有“开放/未定义”类型的人,然后在以后指定为申请人或其他人。 - 允许引入新类型的申请人(比如说是合作的后期保证人......等等)......
缺点:
总的来说,正确的设计最有可能是一张桌子。唯一可能的例外是,如果随着时间的推移,为一种类型的申请人保留的信息开始与申请人的其他类型显着不同。 (即便如此,我们也可以通过不同方式处理这种情况,包括为这些额外字段引入相关表格,因为它可能更有意义;是的,再次使用两个表系统,但是额外的字段可能适合“自然地“在语义,用法等方面一起......”
答案 4 :(得分:1)
您的两种变体都有一个缺点:任何人都可以是申请人和共同申请人两次或更多。所以你应该使用表Person(PersonID,FirstName,LastName,SSN,Email ...)和表共同申请人(PersonID作为申请人,PersonID作为CoApplicant)
答案 5 :(得分:0)
因为每个申请人都可以有一个共同申请人 - 所以只需要一张桌子。所以你有Applicants
,它有一个可选的外键字段'coapplicant'(或类似的)。
答案 6 :(得分:0)
如果申请人和共同申请人之间的字段相同,那么我建议您将它们放在同一个表格中,并使用“申请人类型”字段来表明主要或共同申请人。如果有一些关于共同申请人的特殊信息(例如与主要申请人的关系,额外的电话号码,其他东西),您可能需要将其标准化为单独的表格并从那里返回共同申请人(通过(共同))申请人ID)在申请人表中。
答案 7 :(得分:0)
保持两张桌子> 1ST用户类型代码ID 在此表中,您可以保留用户类型,即applicat And Co申请人 第二表用户 - >在这里你可以使用类似的coloums保存所有字段,用户类型代码作为foregin键。 通过这个你可以轻松地在两个用户之间distingush。
答案 8 :(得分:-1)
我知道 - 我为时已晚......贷款申请是您的主要实体。您将有一个或多个贷款申请人。放弃人的想法 - 你正在创造一些你无法控制的东西。我去过那里,做到了,拿到了T恤。