仅允许一个唯一的外键用于主键

时间:2016-04-12 13:31:58

标签: mysql sql database

我在mysql中有3个表,一个是公司表,另一个是许可表,最后一个是两个主键之间的连接表,当一个人将公司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';

似乎无法完成这项工作

1 个答案:

答案 0 :(得分:1)

您需要company中的companylicense唯一:

ALTER TABLE companylicense ADD UNIQUE KEY (company)

或者更好的是,在company中将license设为一个字段,而不是使用链接表。