2016-04-12 21 views
0

私は3つのテーブルをmysql、1つはCompanyテーブル、もう1つはライセンステーブル、最後は両方のプライマリキー間の結合テーブルです。入社テーブル内のライセンスIDは、これが起こることはできませんが、複数の企業が1つのライセンスのために存在することができますので、私は唯一のライセンスIDプライマリに1つの一意の外部キーを許可する

HERESにテーブル

のための1つの会社のIDを許可する何かをする必要がありテーブルライセンス

CREATE TABLE `License` (
    `license_id` int(11) NOT NULL AUTO_INCREMENT, 
    `license_number` varchar(45) NOT NULL, 
    `start_date` date NOT NULL, 
    `end_date` date NOT NULL, 
    `duration` int(11) NOT NULL, 
    `expiry_date` date NOT NULL, 
    `product_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`license_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1; 
; 

会社表

CREATE TABLE `Company` (
    `company_id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `physical_address` varchar(255) DEFAULT NULL, 
    `postal_address` varchar(255) DEFAULT NULL, 
    `reseller_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`company_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1; 

とこれまでのところ、私はこの

INSERT INTO CompanyLicense (license_id, company_id) VALUES 
('2','6') on duplicate key update license_id = '2'; 

doesntのを持って

CREATE TABLE `CompanyLicense` (
    `license_id` int(11) NOT NULL, 
    `company_id` int(11) NOT NULL, 
    PRIMARY KEY (`license_id`,`company_id`), 
    KEY `companlicence_company_fk_idx` (`company_id`), 
    CONSTRAINT `companylicense_company_fk` FOREIGN KEY (`company_id`) REFERENCES `Company` (`company_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `companylicense_license_fk` FOREIGN KEY (`license_id`) REFERENCES `License` (`license_id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

テーブルに参加するには、あなたがcompanylicensecompanyを一意にするために必要な仕事

+1

見出しがひどく書かれている –

+1

ライセンスごとに会社が1つしかない場合は、「会社」を「ライセンス」のフィールドにしてはどうでしょうか? – Quassnoi

+0

実際に動作する –

答えて

1

を行うように見える:

ALTER TABLE companylicense ADD UNIQUE KEY (company) 

以上、licenseのフィールドをリンクテーブルを持つ代わりにcompanyにします。

+0

はい私は結合テーブルを持っていましたが、ユニークキーを実行できましたが、私はcompany_idフィールドをライセンステーブルに入れます –

関連する問題