【问题标题】:How design Employee table for many phone numbers?如何为多个电话号码设计员工表?
【发布时间】:2013-04-07 01:48:04
【问题描述】:

假设您正在设计一个 Employee 表,并且必须容纳不同的电话号码。现在是 Home、Work 和 Cell,但我想将来可能会有其他人。还可以说,企业关心知道每个员工使用什么样的手机。你会怎么设计呢?

这是一种非规范化的方式。很简单,但意味着为任何新手机类型添加一列:

员工

  • 员工 ID
  • 员工姓氏
  • 员工名字
  • 员工家庭电话
  • 员工工作电话
  • 员工手机
  • 手机ID

手机

  • 手机ID
  • 手机制作
  • 手机型号

这是一种更规范化/可扩展的方式,但接下来需要弄清楚类型 = 手机(但不是类型 = 家庭或工作)的电话号码的手机品牌/型号信息放在哪里:

员工

  • 员工 ID
  • 员工姓氏
  • 员工名字

员工电话

  • EmployeePhoneId
  • 员工电话号码
  • 电话类型ID

手机类型

  • 电话类型ID
  • 电话类型名称
  • CellPhoneTypeId

我的倾向总是倾向于可扩展(虽然更复杂)而不是简单(但可扩展性较差),但在这里我不确定.. 尤其是当您考虑到员工可能永远不会拥有每种类型只有 1 个时的电话。如果你是可扩展的,那么未来的代码就不能做出这样的假设,并且总是必须适应同一类型的多个数字的可能性(这不太现实)。

感谢您的任何想法。

【问题讨论】:

标签: database-design


【解决方案1】:

员工
员工ID
雇员姓氏、雇员名字

电话
电话ID
电话类型ID、电话号码

电话类型
电话类型ID
手机品牌、手机型号

员工电话
员工 ID、联系人
电话号码、备注

我建议完全删除 Phonetype。实际上,这无关紧要——它很快就会充满陈旧的垃圾。我看不出有任何高级主管会觉得有必要将他们最新玩具的详细信息告知 IT 部门。毕竟,IT 应该自动知道,不是吗?

我会添加一个Contact 字段 - 看,我在字段名称方面不太擅长,好吗?我的意思是reason for contact,可以是“工作”或“家”或“周末”或“高尔夫俱乐部(星期四)”或其他。 Notes 可以用于良好的注释,例如 Ask for Jacinta 如果 contact 是“医疗紧急情况”。

至于拥有多部手机——我认识的一位医生携带三部手机——除了他的办公室电话、实习电话、至少两部医院办公室电话、家庭公用电话和私人电话——家(还有多个家……)他能记住所有的数字真是一个奇迹……

【讨论】:

    【解决方案2】:

    这样的?

    Phone
    ID 
    Name 
    Number 
    Type ENUM('Work', 'Home','Cell')
    
    Employee
    ID 
    EmployeeLastName 
    EmployeeFirstName 
    
    EmployeePhone
    ID
    EmployeeID
    PhoneID
    

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多