在SQL Server中设计规范化数据库

时间:2013-05-28 18:14:16

标签: sql sql-server database-design normalization

我是一名新手数据库管理员,我正在开发一个项目,该项目将采用硬件清单电子表格并将其迁移到SQL服务器。目前,数据存在为一个大的非规范化视图。我想要达到3NF,但不知怎的,我觉得我没有设计得好。

让我简要介绍一下情况:

  • 学区有几栋建筑,而这些建筑又有几个房间。学校正在经历一个扩张期,因此新的房间不断“建造”,因此“房间数量”不能用作主要钥匙,因此导致我使用代理钥匙。
  • 教师被分配到房间,但是房间不一定要有教师(即实验室)。教师也可以更换房间。
  • 购买硬件时,会给它一个条形码编号(将其视为PO上的行项目编号)。实际的硬件部分通过其序列号识别。
  • 将硬件分配给一个房间并给出一个工作站编号并分配一个IP地址。

设计看起来是否坚固或有缺陷?此外,是否可以在一对多关系之间创建联结表(特定的硬件分配给一个房间,一个房间可以有许多硬件)。

请找到以下链接。

Logical Database Design

2 个答案:

答案 0 :(得分:1)

从每个实体的功能分解开始,并定义它“是什么”与它的使用方式。 3NF是关于避免重复和保持正确的参考水平。

对于此问题,建模一个BUILDING(PK:自动ID,名称等)。 然后使用外键建模主键建模ROOM(PK:自动ID,数字等)。 然后模拟TEACHER(PK:auto-ID,name等),没有外键。

对于教师和房间分配之间的关系,请使用连接表:

TEACHER_ROOM

这将有一个复合主键: TEACHER_ID ROOM_ID

因此,教师可以被分配到一个房间,但是一个房间不需要教师,在这个模型中,教师可以被分配到许多房间(一对多基数)。

与硬件相同 - 用SERIAL_NUMBER等自己定义它。 然后有一个ROOM_HARDWARE表,其硬件在哪个房间,硬件ID上有一个唯一的密钥,因为它一次只能在一个房间里,但ROOM可以有许多硬件。

答案 1 :(得分:0)

唯一能与我联系的是硬件表。类别和制造商应位于不同的表格中。