Попробуйте схему ниже.Это предотвратит записи, которые пытаются назначить более одного основного номера на человека.
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);
Это позволит БД контролировать один основной номер телефона для каждого человека.Например, если вы попытаетесь назначить другой основной номер телефона Майклу Джонсу:
INSERT INTO номер телефона (номер телефона, person_id, is_primary) VALUES ('0123211234', 1, 1);
Вы будетеполучить «Дублирующую запись« 1-1 »для ключа« idx_person_primary »».
http://sqlfiddle.com/#!9/dbb3c7/1