我有一个名为WorkItemNotes的表,以及Customers和Employees的单独表。
我正在使用MySQL WorkBench来绘制数据库表和关系,并有几个问题。
客户和员工都可以向WorkItemNotes表添加注释,相关的ID将存储在表中:
| WorkItemNotes |
| guid/ID |
| Notes |
| Author |
我最好有两张笔记表,每个客户和员工一张?或者,如果我保留一个表,我如何在WorkBench中设置关系。将外键附加到Customer和Employee表引用的Author字段是否有效?
答案 0 :(得分:3)
最干净的解决方案是将Person的存在建模为事实,与其作为Customer或Employee的状态不同,并将Notes与Person关系联系起来:
Person { PersonID PK, ... }
Customer { PersonID PK FK(Person.PersonID), ... }
Employee { PersonID PK FK(Person.PersonID), ... }
WorkItemNotes { NotesID PK, Notes, AuthorID FK(Person.PersonID) }
这具有员工也可以成为客户的附加功能(或错误,取决于业务规则)。
答案 1 :(得分:1)
你可以做这样的事情
| WorkItemNotes |
| guid/ID |
| Notes |
| Author |
| AuthorType |
在表格中添加一个字段,因为AuthorType将为您工作
答案 2 :(得分:1)
我可能会尝试这样做。
使用UserID作为ID的通用用户表 也许你可以添加一个名为User Type的列,它可以是Employee / Customer / others
将此用户ID链接到WorkItemNotes作为FK。
拥有2个独立的员工和客户表 它们中的每一个都具有对具有客户/员工特定信息的用户表的用户ID的FK引用
答案 3 :(得分:1)
为您的笔记准备一张桌子。 notes表中的主键(例如note_id)将存储在customers和employees表中。
**Note**
note_id
notes
author
**Customers**
customers_id
note_id NULL
...
**Employees**
employees_id
note_id NULL
在员工和笔记,客户和笔记之间拥有FK。 此设计仅允许1个音符。因此,如果您需要n个音符,那么您需要一个链接表,例如:
**Notes**
external_id
external_type
note_id
对于客户,external_type = 1,对于员工,为2。 external_id是cusomter_id或员工ID。
这种设计允许许多不同的表记笔记。 如果您只有两个可以存储笔记的表,那么只需使用两个笔记表,但这种设计允许使用多个。但是,由于链接表能够加入任何客户或员工表,因此您无法使用FK。