如何将这些表标准化为3NF?

时间:2013-12-13 11:47:13

标签: sql database-normalization 3nf

我的表格如下:

instructors(instructorID(PK), name, address, contact_details, pps_number,
            job_desc, specialty)
admin(adminID(PK), name, address, contact_details, pps_number, job_desc)
equipment(equipmentID(PK), type_of_equipment, last_used_by, class_used_for,
          date_used)
members(memberID(PK), name, address, contact_number, payment_type,
        membership_paid)
receipt(receiptID(PK), date_and_time, supplier) 
classes(classID(PK), weights, abs, core_strength)

有人可以教我如何正常化这些吗?

1 个答案:

答案 0 :(得分:4)

“钥匙,整个钥匙,只有钥匙,所以帮助我Codd。”

这是关于3NF表的“说法”。简单地说,每个表必须包含一个主键(1NF)。 2NF是“整个密钥”,这意味着每个表中的所有属性都必须依赖于表的主键。 3NF“只不过是关键。”要求非关键属性依赖于“只有关键”,确保3NF。这意味着非键属性不能依赖于任何给定表的主键本身以外的属性。

例如:

instructors(instructorID(PK), name, address, contact_details, pps_number, job_desc, specialty)

此表有一个主键,因此它适合1NF。 2NF声明所有属性都取决于密钥。 对于这个表,我个人并不认为job_desc和专业依赖于教师本身,就实体属性关系而言。为此,我实际上将该属性拆分为一个新表。

instructors(instructorID(PK), name, address, contact_details, pps_number, job_ID)
jobs(job_ID, job_desc, specialty)

Instructors表现在适合2NF。 现在为第三范式。 3NF“只是关键”,这意味着非关键属性不能依赖于任何给定表的主键本身以外的属性。

让我们来看看教师的属性: instructorID(PK) - PK本身。

name - Only dependent on the instructor itself.

address - Only dependent on the instructor itself.

contact_details - Only dependent on the instructor itself.

pps_number - I don't know what this is, so I can't say whether or not it should stay.

job_ID - Only dependent on the instructor itself.

此表现在符合3NF。

以下是我发现非常有用的关于规范化的一些其他信息。

http://en.wikipedia.org/wiki/Third_normal_form