2017-05-27 17 views
0

テーブル内の以下の整合性をチェックするにはどうすればよいですか?整合性制約の検証Mysql

の表は、このように書きます:

Employee: 

employee_id | Name | job_title | department_name 

同じ役職を持つすべての従業員が同じ部署に属している必要があります。

たとえば、在庫マネージャとして働くすべての従業員は 部門出荷に属します。いずれかの従業員が同じ職務の他の 部署で働いている場合、スクリプトは、 の形式で上記で定義した整合性制約違反の 違反を表示する必要があります。

ジョブタイトル| EMPLOYEE ID | DEPARTMENT NAME

+0

、どこ/あなたは '株式manager'が属するべきであると定義した方法:私は代わりにリンクを送信しようとしますので、私は、画像を投稿することができないのです

、多分適切なユーザーには感謝し、私のためにこれを編集することができます「出荷」に? – Utsav

+0

ご回答いただきありがとうございます。これは定義されていませんが、この作業では在庫管理者が出荷部門に属していることを前提としています。 –

+0

コーディング中に 'assume'は実際には機能しません。他の部署はどうですか?期待どおりの出力が必要な場合は、マスターソースなどを用意する必要があります。 – 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

関連する問題