【问题标题】:Database design of a record keeping system记录保存系统的数据库设计
【发布时间】:2017-03-24 08:57:30
【问题描述】:

我正在设计一个记录保存系统的数据库。 该系统有4种记录/表格。

这是我的设计。

首先,这 4 种表单具有共同的输入字段,例如姓名、年龄和地址。我将这个公共输入字段分隔在一个表中并添加一个外键。

例如:

common_fields
 ID
 Name
 Age
 Address
 Form_fk_id (foreign key to what form)
 Form_type_number(this will define what kind of form the user used)

form1
 ID
 Birthdate
 Occupation
 etc..

form 2
 ID
 Mother_name
 Father_name
 etc..

form 3
 ID
 School_address
 School_name
 etc..

基本上,它看起来像这样。

Form_fk_id - 连接公共输入字段表和表单表的外键

Form_type_number - 这对于了解要检索的表单很有用。

我不确定这种设计。我不知道这是否是最好的设计方式。

【问题讨论】:

    标签: database-design schema rdbms


    【解决方案1】:

    您不希望公用表中的 FK 引用。公用表将具有详细表将与它们的 FK 一起引用的键和类型指示符。

    common_fields
     ID
     Form_type (defines what kind of form) must contain 1, 2 or 3
     Name
     Age
     Address
     constraint UQ_Common_Fields_ID_Type unique( ID, Form_Type )
    

    唯一约束使 FK 引用 (ID, Form_Type) 成为可能。

    form1
     ID
     Form_fk_id (with ID, FK to common) must contain 1
     Birthdate
     Occupation
     etc..
    
    form2
     ID
     Form_fk_id (with ID, FK to common) must contain 2
     Mother_name
     Father_name
     etc..
    
    form3
     ID
     Form_fk_id (with ID, FK to common) must contain 3
     School_address
     School_name
     etc..
    

    假设 Form_Type 字段是小整数,并且在公用表中被限制为仅值 (1, 2, 3)。在 Form1 表中,该字段仅限于值 1,在 Form2 中仅限 2,在 Form3 中仅限 3。

    创建新表单时,会将公共数据插入到 Common_Fields 表中,生成唯一的 ID 值。 Form_Type 字段包含值 1、2 或 3,具体取决于表单的类型。

    假设值为1,则匹配记录只能插入Form1表中。

    具有相同 ID 值的条目不能写入其他任何一个表单表。 Form_Fk_Id 的值为 1 是不允许的,因为每个表都有一个检查约束,以确保该字段必须包含正确的值。非 1 的值不会在公用表中找到匹配的值集。

    这使得在公用表中定义为特定表单类型的表单只能在正确的表单表中具有关联条目。

    当用户想要查看表单123的详细信息时,在公共表中找到123,并根据表单类型将正确表中的详细信息连接到它。

    实际上,我会有三个视图,每个视图都显示每个表单的完整详细信息。视图上的触发器将允许应用程序代码操作每种类型的表单,就好像表单数据在一个完整的行中,而不是在两个表中分解。这会对应用程序隐藏结构并确保正确维护结构。

    【讨论】:

    • Form_fk_id (with ID, FK to common) must contain 3 “有身份证”是什么意思? ,我不明白为什么它必须包含1、2、3。它应该包含谁拥有表单的id吗?
    • ID 包含表单所有者的 ID。 Form_fk_id 字段与 ID 一起构成 Common 表的外键。这就是为什么 Common 表对 ID 和 Form_Type 形成唯一约束。 Form_fk_id 必须包含 3,因为它是 Form3 表,并且只能包含 form 3 定义。检查约束或触发代码强制执行此操作。 Common 的 Form_Type 字段可以包含 1、2 或 3,因为此处定义了每种表单类型。如果它包含3(例如)一个具有相同ID值的条目只能放在Form3表中。
    猜你喜欢
    • 2012-07-23
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2012-02-12
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多