我需要创建一个名为benificiaries的表,其中我有三列
customerid
accountno
bank
条件应该是一个customerid
只能有一个唯一accountno
。但是另一个customerid
可以具有相同的accountno
和相同的唯一(仅一次)。所以我不能给accountno
主键。即使对于customerid
,我也无法提供主键,因为一个customerid
可以包含多个具有唯一accountno
的记录。
在这种情况下我们如何创建表格?有什么想法吗?
答案 0 :(得分:5)
您可以使用多列唯一索引。
CREATE TABLE YOUR_TABLE (
id INT NOT NULL AUTO_INCREMENT,
customerid INT NOT NULL,
accountno INT NOT NULL,
bank INT NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX name (customerid,accountno)
);
此处的文档。
https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html
答案 1 :(得分:-1)
如果一个customerid只能拥有一个唯一的帐号,那么您对该表中客户ID的重复怎么看?
答案 2 :(得分:-1)
您只需将主键设置为另一列,并使customerid唯一。我想这就是你想拥有的。现在每个customerid都是唯一的,但许多costomerids可以拥有相同的accountno。
CREATE TABLE benificiaries(
id INT PRIMARY KEY,
customerid INT NOT NULL UNIQUE,
accountno INT NOT NULL,
bank INT NOT NULL
);
答案 3 :(得分:-1)
数据库无法管理数据模型中的所有业务约束。对于这种情况,您可以使用索引解决基本约束(customerid的多列索引,accountno和accountno的简单列索引以相反的方式执行搜索),添加自动增量ID并在代码中处理业务约束。
答案 4 :(得分:-1)
只需将您的customer_id设置为主键,然后再考虑只有两个customer_id可以拥有相同帐号的概念,这取决于您的应用或系统的流程。
CREATE TABLE `tmpr_map`.`tbl_example`
(`customer_id` INT(11) NOT NULL AUTO_INCREMENT,
`account_number` VARCHAR NOT NULL , `bank_amount` DECIMAL(11,2) NOT NULL ,
PRIMARY KEY (`customer_id`)) ENGINE = InnoDB;