用于规范共享相似数据的多个catogories的表设计问题



我对表格设计有点困惑。

方法1)使用第一种方法,我可以从电话簿表中选择所有电话号码,并通过指定类型过滤出员工的电话号码。方法2)在第二种方法中,我可以通过连接两个表来选择全部,并可以检索员工的电话号码。

我对地址也有同样的问题。我有员工、客户、员工和其他人的地址。我已经在谷歌上搜索过了,仍然无法选择哪种方法是正确的。哪种方法是正确的,为什么另一种不正确,还有其他更好的设计?

方法1

employee
id | name 
1      e

customer
id | name
1     c

phone_book
type | fk_id |     phone
  e      1         123123123
  c      1         451323123

方法2

employee
id | name 
1      e

customer
id | name
1     c

employee_phone_book
emp_id  |     phone
   1         1231233434
   2         6273343423

customer_phone_book
cus_id  |  phone
   1       5231233434
   2       1251233434

编辑:员工和客户可以有多个电话号码。地址详细信息也是如此。

employee
id | name | phone_id
1      e    1

customer
id | name | phone_id
1     c     2

phone_book
phone_id |     phone
1         123123123
2         451323123

对我来说,对电话的引用应该在employeecustomer表中(FK到phone_book表)

更新:如果客户/员工可能有多部手机,最好通过附加表格(如)定义多对多关系

customer_phone 
phone_id |     customer_id (reference to the customer table)
1              1
2              1

如果员工和客户有多个电话号码,那么你的电话簿应该是这样的。您需要创建一对多关系表结构。

phone_book
phone_id | EmpOrCustomer | EmpOrCustomerId | phone
1          1               1                  123123123
2          1               1                  45132XXXX
3          2               4                  45132XXXX

在上面的表结构中,您可以添加两个额外的列,告诉您其员工或客户,另一个列告诉员工或客户id是什么。

希望这能有所帮助。