作为家庭作业的一部分,我被要求根据案例研究创建表格,所有表格必须是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 |
vet_nurse:
| staff_ID | appointment_ID |
约会表:
| appointment_ID | customer_ID | staff_ID | patient_ID | date | time |
initial_appointment表:
| appointment_ID | customer_ID | patient_ID | diagnosis | treatment |
followUp_appointment:
| 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 |
product_sold:
| sale_ID | product_ID | sale_Date |
供应商:
| supplier_ID | product_ID | contactNumber | email |
suppliers_address:
| 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_address – 为什么你有staff_id专栏?这不是一个好主意.另外 – 你已经提到了与地址的传递依赖关系.
vet和vet_nurse – 这些表具有完全相同的列,为什么有两个表?当然有一种方法可以使用.
约会表 – 初始约会和跟进具有相同的列.同样,应该有一种方法可以让它们成为一体.我将给你一个关于约会表的直接建议:把日期和时间作为一列aptDate,并给它DATETIME值类型.
patient – customer_ID值在患者表中,那么为什么它应该在其他人中?此外,以前的约会和以前的治疗将很难在数据库内跟踪.一旦开始输入数据,您应该会看到.
产品 – 就像现在一样,它似乎并不太糟糕,但我将在稍后讨论一些问题.
product_sold – sale_ID是唯一的吗?如果是,一次销售中可以销售多少产品?这个表肯定没有正常化.
供应商 – 供应商可以提供多少种产品?这是您如何更改产品表的提示.
suppliers_address – 与postalCode相同的问题.另外,为什么suppliers_address指向供应商?
库存 – 您是否已经在产品表中跟踪所有这些字段(价格除外)?
这些都是我看到的潜在问题,但我不能凭良心给你解决你的任务.但是,如果这是您在标准化数据库中的第一次尝试,那就完全不错了.