【问题标题】:Normalizing Database Table规范化数据库表
【发布时间】:2016-06-06 10:21:05
【问题描述】:

我被问到一个面试问题,我想确认我是否做对了。有一个表叫Employee,用月薪来保存员工信息(假设这个表目前只有一年的记录)

Employee(ID,Name,Month,Salary)

样本数据:

ID  Name Month Salary
1    A    Jan   2500
1    A    Feb   3000
2    B    Jan   4500
2    B    Feb   6500

问题是:

这个表架构好吗?如果没有,你将如何解决?

我对表格进行了规范化,想知道这是否是对上表进行规范化的正确方法?

Employee(ID,Name)
tblSalary(ID,Emp_ID,Month,Salary)

如果这是一个非常基本的问题,请原谅

【问题讨论】:

  • 如果员工被雇用只工作一年,你很好。
  • 对我来说看起来不错,但作为面试官我会问你为什么这样做?它遵循什么原则?第一个版本违反了什么样的标准?
  • 我也想知道为什么tblSalary 需要ID 列。
  • ...但是月薪是多少?
  • @Thilo tbh,我想如果我想保存一个没有获得任何薪水的新员工的信息,那么其余字段将为空。桌子设计对我来说并不好看。你能解释一下吗?假设你是我的面试官,你想解释为什么它应该被规范化

标签: database normalization


【解决方案1】:

你做对了:

第一范式

  1. 消除单个表中的重复组。
  2. 为每组相关数据创建一个单独的表。
  3. 使用主键标识每组相关数据。

唯一要指出的是您的“月”实体,我会将其更改为日期,因为它限制员工只能受雇一年(正如另一条评论所指出的那样)

【讨论】:

  • 如果我不规范化,我们必须输入所有月份的员工信息,从而导致重复组。这就是你所说的重复组的意思。对吗?
  • @HumaAli 正是...这将导致冗余信息(如果您愿意,可以重复组或行)..
  • 但是现在好像有一个多余的主键。 tbl_salary 中的行已由“emp_id,month”标识。为什么会有额外的“id”?
  • @Thilo True .. 您可以跳过 tblSalary ID,只使用 Employee 表中的主员工键。
猜你喜欢
  • 2015-02-15
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 2012-06-21
相关资源
最近更新 更多