【发布时间】:2011-01-22 07:18:06
【问题描述】:
我正在创建一个时间表应用程序。我有以下实体(其中包括):
- 公司
- 员工 = 与公司关联的员工
- 客户 = 与公司相关的客户
到目前为止,我有以下(缩写)数据库设置:
Company
- id
- name
Employee
- id
- companyId (FK to Company.id)
- name
Client
- id
- companyId (FK to Company.id)
- name
现在,我希望员工与客户相关联,但仅该客户与员工工作的公司相关联。您将如何保证数据库级别的数据完整性?还是我应该仅仅依靠应用程序来保证数据的完整性?
我想过像这样创建一个多对多表:
EmployeeClient
- employeeId (FK to Employee.id)
- companyId \ (combined FK to Client.companyId, Client.id)
- clientId /
因此,当我为员工插入客户以及员工的公司 ID 时,如果客户端与员工的公司 ID 没有关联,数据库应该会阻止这种情况。这有意义吗?因为这仍然不能保证员工与公司有关联。你如何处理这些事情?
更新
场景如下:
-
一家公司有多名员工。员工只会与一家公司相关联。
-
一家公司也有多个客户。客户只会与一家公司相关联。
(可以说,公司是一个沙盒)。
-
公司的员工可以与其公司的客户相关联,但前提是该客户是公司客户的一部分。
换句话说:
该应用程序将允许公司创建/添加员工和创建/添加客户(因此在 Employee 和 Client 表中的 companyId FK)。接下来,公司将被允许将某些客户分配给它的某些员工(EmployeeClient 表)。
想象一个员工在为几个客户编写可计费时间的项目,但不得允许该员工为非雇主(公司)分配的客户编写可计费时间。因此,员工不会自动访问公司的所有客户,而只能访问公司为他们选择的客户。希望这对此事有更多的了解。
【问题讨论】:
标签: mysql normalization data-integrity