主密钥只允许使用一个唯一的外键



我在mysql中有三个表,一个是公司表,另一个是许可证表,最后一个是两个主键之间的连接表。当一个人在连接表中的许可证id中添加一个公司id时,它允许多个公司存在于一个许可证中,这是不可能发生的,所以我需要做一些事情,只允许一个公司的id用于一个许可证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;

和连接表

    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;

到目前为止,我有这个

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

似乎做不到

您需要使companycompanylicense:中唯一

ALTER TABLE companylicense ADD UNIQUE KEY (company)

或者更好的是使company成为license中的字段而不是具有链接表。

相关内容

最新更新