2017-05-27 27 views
0

如何检查表中的以下一致性?验证串行限制Mysql

表是这样的:

Employee: 

employee_id | Name | job_title | department_name 

所有员工都具有相同的职位必须属于同一个部门。

例如:作为库存经理工作的所有员工属于 部门运输。如果任何员工在其他 部门使用相同的职务工作,脚本必须显示 的违反 以下格式上面定义的一致性约束。

职位名称|雇员ID |部门名称

+0

哪里/你是怎么定义'股票manager'应该属于'运送'? – Utsav

+0

谢谢你的回复。它没有定义,但对于这个任务,我们假设股票经理属于运输部门。 –

+0

'假设'在编码时不起作用。其他部门呢?如果你需要输出,你需要有一个主源或类似的东西。 – Utsav

回答

0

没有完全单独CONSTRAINTS可能的,因为你仍然需要依赖于不存储数据。这可以通过另一个查询表来讨论JOB_TITLEDEPARTMENT之间的关系。

之前,除非是不是实现了关系,这一要求可能不会像您期望的工作。

以下应该做你所期望的:

CREATE TABLE JOB_DEPT_RELATIONSHIP AS (
    JOB_TITLE VARCHAR(255) NOT NULL PRIMARY KEY, 
    DEPARTMENT VARCHAR(255) NOT NULL, 
    UNIQUE(JOB_TITLE, DEPARTMENT) 
); 

那么你实际的表可以被定义为这样的,我想:

CREATE TABLE EMPLOYEE AS (
    EMPLOYEE_ID INT AUTO_INCREMENT PRIMARY KEY, 
    EMPLOYEE_NAME VARCHAR(255) NOT NULL, 
    JOB_TITLE VARCHAR(255) NOT NULL, 
    DEPARTMENT_NAME VARCHAR(255) NOT NULL, 
    CONSTRAINT FK_JOB_DEPT_RELATIONSHIP FOREIGN KEY (JOB_TITLE, DEPARTMENT_NAME) REFERENCES JOB_DEPT_RELATIONSHIP(JOB_TITLE, DEPARTMENT) 
); 

希望这有助于!

+0

当然,您job_dept_relationship表上的唯一键只是说标题和部门的组合是唯一的,这不会停止在不同部门中拥有相同的标题。 –

+0

@NigelRen,它需要加强。我所建议的是一个近似解决方案(基于OP的假设)。 –

0

相信大家可能已经给出了同样的任务,同时参加同一所大学。我现在就解决这个问题,这些表格可能会帮助其他人看到。我仍然习惯于在这里格式化。

我不允许张贴图片,所以我会尝试发送一个链接,而不是,也许是适当的用户可以编辑这个对我来说,谢谢:http://imgur.com/a/FeFRz