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