Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何将这些表规范化为3NF_Mysql_Database_Normalization_Normalize_3nf - Fatal编程技术网

Mysql 如何将这些表规范化为3NF

Mysql 如何将这些表规范化为3NF,mysql,database,normalization,normalize,3nf,Mysql,Database,Normalization,Normalize,3nf,作为家庭作业的一部分,我被要求根据案例研究创建表格,所有表格都必须是3NF格式。然而,我已经试着去理解3NF,但是我还没有掌握它的窍门,希望能得到一些帮助 案例研究的要求适用于兽医诊所: 允许宠物预约 记录宠物治疗 记录哪位兽医进行了治疗 记录企业出售的物品,以提供信息,使企业能够生成库存清单,以便从供应商处购买 不需要:记录所有销售 到目前为止,我有以下表格: 工作人员: | staff_ID | firstName | lastName | gender | address_ID | con

作为家庭作业的一部分,我被要求根据案例研究创建表格,所有表格都必须是3NF格式。然而,我已经试着去理解3NF,但是我还没有掌握它的窍门,希望能得到一些帮助

案例研究的要求适用于兽医诊所:

  • 允许宠物预约
  • 记录宠物治疗
  • 记录哪位兽医进行了治疗
  • 记录企业出售的物品,以提供信息,使企业能够生成库存清单,以便从供应商处购买
  • 不需要:记录所有销售

    到目前为止,我有以下表格:

    工作人员:

    | staff_ID | firstName | lastName | gender | address_ID | contactNumber | partTimeOrFullTime | salary |
    
    工作人员地址表:

    | address_ID | staff_ID | number | street | city | county | postalCode | 
    
    兽医表:

    | staff_ID | appointment_ID |
    
    兽医护士:

    | staff_ID | appointment_ID |
    
    预约表:

    | appointment_ID | customer_ID | staff_ID | patient_ID | date | time |
    
    | appointment_ID | customer_ID | patient_ID | diagnosis | treatment |
    
    初始预约表:

    | appointment_ID | customer_ID | staff_ID | patient_ID | date | time |
    
    | appointment_ID | customer_ID | patient_ID | diagnosis | treatment |
    
    后续任命:

    | appointment_ID | customer_ID | patient_ID | diagnosis | treatment |
    
    病人:

    | patient_ID | customer_ID | animal_type | gender | weight | height | previous_Appointments | previous_Treatment |
    
    产品:

    | product_ID | name | product_Category | animal | price | quantity_Available | reOrder_Level |
    
    已售出的产品:

    | sale_ID | product_ID | sale_Date | 
    
    供应商:

    | supplier_ID | product_ID | contactNumber | email |
    
    供应商地址:

    | supplierAddress_ID | supplier_ID | doorNumber | street | city | town | postalCode |
    
    库存:

    | name | product_ID | quantity_Available | price |
    

    谢谢

    我不会给你一个确切的答案,有两个原因:1)我太懒了,无法过滤所有的文本。好了,我说了。2) 你什么也学不到

    第三种范式是关于没有可传递的函数依赖关系。换句话说,如果A确定B,而B不确定A,而B确定C,那么您有一个可传递的依赖项,所以B和C可以放在它们自己的表中

    集合中的一个示例可以是包含城市、州和邮政编码的表。在现实世界中,zipcode可用于确定城市和州。也许您可以有一个单独的表,其中zipcode作为键,city和state是另外两个属性。这可能是一个可传递的依赖项,因为地址ID->邮政编码和邮政编码->城市,如我所说

    另一件需要记住的重要事情是:如果任何事实出现两次,您可以将其正常化更多。例如,[city A,State B,ZipCode C]可能会出现多次,因为我确信您有来自同一地区的多个人

    编辑 在浏览并编辑了这篇文章之后,我发现了很多值得评论的地方,但由于这是一项作业,如果你仍然好奇的话,我会给你时间考虑一下,过几天或更长的时间再来看一遍

    编辑2

    我会给你一张桌子一张桌子的建议,但会尽量把这些限制在正确的方向上

    staff
    -没有可传递的依赖项跳转到我这里,其中的所有内容都由主键决定,这很好

    员工地址
    -为什么有员工id栏?这不是一个好主意。此外,正如我前面提到的,您对地址有一个可传递的依赖关系

    vet和vet_nurse
    -这些表有完全相同的列,为什么有两个表?当然有一种方法你可以使用它

    预约表
    -初始预约和跟进具有相同的列。同样,应该有一种方法可以让他们成为一个。我将为约会表提供一个直接的建议:将日期和时间作为一列aptDate,并为其指定DATETIME值类型

    patient
    -客户ID值在patient表中,为什么应该在其他表中?此外,以前的预约和治疗也很难在数据库中进行跟踪。当你开始输入数据时,你就会看到这一点

    产品
    -就目前而言,它似乎并不太糟糕,但有些问题我将在后面讨论

    销售的产品
    -销售标识是否唯一?如果是,一次销售可以销售多少产品?这张表显然没有很好地规范化

    供应商
    -供应商可以拥有多少产品?这是关于如何更改产品表的提示

    供应商\u地址
    -与此处的postalCode相同。此外,为什么供应商地址指向供应商

    库存
    -您是否已经在跟踪产品表中的所有字段(价格除外)


    这些都是我看到的潜在问题,但凭良心说,我无法为你的任务提供解决方案。但是,如果这是您第一次尝试使用规范化数据库,那么它一点也不坏。

    只是一个提示:我会尝试更好地格式化它。这是一个很长的问题,很难过滤。对于那些声称不了解正常化的人来说,这是一个非常好的尝试!但是,将customer_id存储在customer表和patient表之外的任何位置都是多余的。日期和时间应存储为单个实体。此外,没有单独的初始和后续表格。如果不仅仅是患者的首次就诊是他们的首次就诊,那么在单独的列中存储一个标志(0/1),指示“首次”就诊。在我为此制定的EERD中,我们被要求对普遍化/专业化进行建模,我这样做是因为预约是初次预约还是后续预约。我不应该为他们分开桌子吗?@h21他们仍然只是约会,不是吗?所有的地址都可以放在一张桌子上。跟进和初次预约看起来是一样的,所以可以放在一张桌子上。如果你能指出问题所在,那么我可以检查一下,并试着纠正它们。我已经坚持了大约一个星期了,如果你能指出需要改进的地方,我会感到满意的it@h21你的作业什么时候到期?