【问题标题】:Convert table to 2NF - strange table to convert?将表格转换为 2NF - 要转换的奇怪表格?
【发布时间】:2011-09-17 06:35:11
【问题描述】:

我有下表,应该将其转换为 2NF。

我已经找到了答案:

技能:员工、技能

位置:员工,当前工作 位置

我觉得我对这个 ^above^ 错了。

也有人可以解释 1NF、2NF 和 3NF 之间的区别。我知道 1 是第一位的,你必须把它分解成更小的表格,但想要一个非常好的描述来帮助我更好地理解。谢谢

【问题讨论】:

  • @David 谢谢,你能告诉我我对上面那个是否正确吗?
  • 从帖子中的内容来看,它看起来像 3NF。这并不一定意味着它会做你想做的事:)
  • @David 我怎样才能得到它,所以它在 2NF 中呢?这就是练习的目的
  • 你想倒退,所以它是2NF而不是3NF?

标签: database database-design database-normalization database-table


【解决方案1】:

我是学习 2NF 的新手,但我已经解决了这样的答案。让我知道这是否正确,以便我了解我的错误并进行更多练习。

只有两张桌子。谢谢

【讨论】:

    【解决方案2】:
    Employee Table
    
    EmployeeID  |   Name
    1       |   Jones
    2       |   Bravo
    3       |   Ellis
    4       |   Harrison
    
    
    Skills Table
    
    SkillId     |   Skill
    1       |   Typing
    2       |   Shorthand
    3       |   Whittling
    4       |   Light Cleaning
    5       |   Alchemy
    6       |   Juggling
    
    Location Table
    
    LocationId  |   Name
    1       |   114 Main Street
    2       |   73 Industrial Way
    
    EmployeeSkill Table
    
    EmployeeId  |   LocationId  |   SkillId |   SkillName
    1       |   1       |   1   |   Typing
    1       |   1       |   2   |   Shorthand
    1       |   1       |   3   |   Whittling
    2       |   2       |   4   |   Light Cleaning
    3       |   2       |   5   |   Alchemy
    3       |   2       |   6   |   Juggling
    4       |   2       |   4   |   Light Cleaning
    

    在 EmployeeSkill 表中,主键是 EmployeeId + LocationId,这为您提供了他们在该位置所拥有的技能。在此示例中,包含 SkillName 列违反了 3NF。 这种做法实际上有时用于数据库设计(称为“非规范化”),以减少连接以提高读取通常一起使用的数据的性能。
    通常这仅在用于报告的表格中完成。

    【讨论】:

    • 您正在引入有保证的唯一键,这通常是一种很好的做法,但与分配无关,并且不清楚是否需要分配 SkillId。我也不喜欢加入体现一对一和一对多关系的表。
    • 是的,很难准确判断最终格式可能是什么,技能是否取决于位置?
    • -1。在家庭作业和教育的背景下,学生应该使用作业中的列。他们不允许引入新的列。一个风险是,一堵数字墙掩盖了真正发生的事情。另一个是引入带有 id 号的新列似乎向学生暗示“规范化”意味着“用 id 号替换字符串”。
    • 通常任何具有主键的东西都符合 BCNF (3.5 NF)
    • -1。答案是一个不好的例子。规范化与为事物发明新密钥无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多