gpt4 book ai didi

MySQL 一对多主选

转载 作者:行者123 更新时间:2023-11-29 10:00:58 24 4
gpt4 key购买 nike

假设我有一群人有多个电话号码。在 MySQL 数据库中,我有一个具有多对一关系的人员表和电话号码表。现在,我想将其中一个号码设为主要电话号码,并且每人只允许使用一个主要号码。我该如何建模?

最佳答案

尝试下面的架构。它将阻止尝试为每个人分配多个主要号码的条目。

CREATE TABLE person (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(50) NOT NULL,
`last_name` VARCHAR(50) NOT NULL,
PRIMARY KEY(`id`)
);

CREATE TABLE phonenumber (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`phonenumber` VARCHAR(10) NOT NULL,
`person_id` INT(11) UNSIGNED NOT NULL,
`is_primary` ENUM('1'),
PRIMARY KEY(`id`),
UNIQUE KEY idx_person_primary (`person_id`, `is_primary`),
UNIQUE KEY idx_person_phone (`phonenumber`, `person_id`)
);

INSERT INTO person (first_name, last_name) VALUES ('Michael', 'Jones');
INSERT INTO phonenumber (phonenumber, person_id, is_primary) VALUES ('9876543210', 1, 1);
INSERT INTO phonenumber (phonenumber, person_id, is_primary) VALUES ('1234567890', 1, NULL);
INSERT INTO phonenumber (phonenumber, person_id, is_primary) VALUES ('1234567891', 1, NULL);

这将允许数据库为每个人监管一个主要电话号码。例如,如果您尝试将另一个主要电话号码分配给 Michael Jones:

INSERT INTO 电话号码 (phonenumber, person_id, is_primary) VALUES ('0123211234', 1, 1);

您将收到“ key “idx_person_primary”的重复条目“1-1””错误。

http://sqlfiddle.com/#!9/dbb3c7/1

关于MySQL 一对多主选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52981631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com