我是否正确地规范了这些数据

Zam*_*anò 10 database database-normalization

我正在从网上完成规范化练习,以测试我的数据规范化能力.这个特殊问题发现于:https://cs.senecac.on.ca/~dbs201/pages/Normalization_Practice.htm(练习1)

这个问题的基础表如下: 表

可以从此表创建的非标准化表是:

在此输入图像描述

为了符合First Normal表单,我必须通过将visitdate,procedure_no和procedure_name移动到它们各自的表来摆脱表中的重复字段:

在此输入图像描述

这也符合2NF和3NF,这使我怀疑我是否正确执行了标准化过程.如果我没有从UNF正确地搬到1NF,请提供反馈.

Dan*_*_ds 4

第一步,您可以创建下表(假设pet_id在表中是唯一的):

Pets:   pet_id, pet_name, pet_type, pet_age, owner
Visits: pet_id, visit_date, procedure
Run Code Online (Sandbox Code Playgroud)

更进一步,您可以拆分,procedure因为描述是重复的:

Pets:       pet_id, pet_name, pet_type, pet_age, owner
Visits:     pet_id, visit_date, procedure_id
Procedures: procedure_id, description
Run Code Online (Sandbox Code Playgroud)

procedures虽然相同的数据visit_date可以有多个pet_id,但我认为没有理由进一步拆分它们:日期可以(理论上)存储在 2 个字节中,并且拆分该数据会产生更多开销(加上额外的索引)。

您还想更改pet_age为,pet_birth_date因为年龄会随着时间而变化。

由于这是您列表中的第一个练习,因此上面的内容可能已经足够了。

更进一步:

一个owner可以有多个宠物,因此可以创建另一个表:

Pet_owners: owner_id, owner_name
Run Code Online (Sandbox Code Playgroud)

然后只owner_idPets表中使用。在真实的系统中会有customer_id, name, address, phone, email等 - 因此应该始终位于单独的表中。

您甚至可以执行相同的操作pet_type并将其存储id在 1 或 2 个字节中,但这完全取决于您稍后要对数据执行的查询类型。