【问题标题】:Designing Normalized Database in SQL Server在 SQL Server 中设计规范化数据库
【发布时间】:2013-05-23 19:38:41
【问题描述】:

我是一名新手数据库管理员,我正在开展一个项目,该项目将采用硬件清单电子表格并将其迁移到 SQL Server。目前,数据作为一个大型非规范化视图存在。我正在努力实现3NF,但不知怎的,我觉得我设计得不好。

让我简要介绍一下情况:

  • 学区有几栋建筑,而这些建筑又有几个房间。学校正处于扩张期,所以不断“建”新房间,所以“房间号”不能用作主键,因此导致我使用代理键。
  • 老师被分配到房间,但房间不一定要有老师(即实验室)。教师还可以更换房间。
  • 购买硬件时,会获得一个条形码编号(将其视为采购订单上的行项目编号)。实际硬件通过其序列号进行识别。
  • 硬件被分配到一个房间,并被分配一个工作站编号和一个 IP 地址。

设计看起来是扎实的还是有缺陷的?另外,是否可以在一对多关系之间创建一个连接表(一个特定的硬件分配给一个房间,一个房间可以有很多个硬件)。

请在下面找到链接。

Logical Database Design

【问题讨论】:

  • 对我来说看起来很可靠,请尝试考虑可能会导致问题的场景,或者您可能被要求考虑的事情并未明确在您的项目范围内(即:当硬件正在修理它是否被分配到“修理”室,还是应该有一个单独的表格来跟踪修理?)我同意硬件可以细分,是否值得全 3NF 取决于您的数据。
  • 感谢 Goat_CO。有一种情况是硬件被回收,或者被认为是过时的。此时,硬件从教室中取出并送到指定的回收区。为了让它工作,我需要在我的 hardware_room 连接表中添加一个 EndDate 字段。

标签: sql sql-server database-design normalization


【解决方案1】:

唯一让我印象深刻的是硬件表。类别和制造商应在单独的表中。

【讨论】:

  • 谢谢克里斯,我应该考虑制造商,因为人们可能会以 Hewlett Packard、Hewlett-Packard 或简称为 HP 的形式进入 HP。
【解决方案2】:

从每个实体的功能分解开始,定义它“是”什么以及如何使用它。 3NF 旨在避免重复并保持正确的参考水平。

对于这个问题,为 BUILDING 建模(PK:自动 ID、名称等)。 然后使用外键对 ROOM(PK:自动 ID、数字等)建模以构建主键。 然后为没有外键的 TEACHER 建模(PK:自动 ID、姓名等)。

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

教师教室

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

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

与硬件相同 - 使用 SERIAL_NUMBER 等自行定义。 然后有一个 ROOM_HARDWARE 表,其中包含哪个硬件在哪个房间中,并在 HARDWARE ID 上有一个唯一键,因为它一次只能在一个房间中,但一个 ROOM 可以有很多硬件。

【讨论】:

  • 谢谢达雷尔!根据您的反馈,我走在正确的道路上,但我需要充实一些项目。
  • 不客气。大多数系统设计问题都源于数据和对象建模,因此在您职业生涯的早期和每个项目中正确处理这两个问题对于两者的成功都至关重要。祝你好运。
猜你喜欢
  • 2011-11-20
  • 1970-01-01
  • 2013-01-18
  • 2011-07-25
  • 2011-04-18
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多