У меня аналогичная база данных с двумя таблицами следующим образом:Могу ли я добавить ограничение проверки для дочернего элемента, проверяющего значение его родителя в MySQL?
+----------------------+ +------------------------+
|Persons | |phones |
+----------------------+ +------------------------+
|id int +-----+ |id int |
|name varchar(100) | +---->+person_id int |
|allowed tinyint(1) | |number int |
+----------------------+ +------------------------+
Один человек может иметь столько телефонов, как он хочет, но он должен быть разрешен к нему (разрешено> 0).
Итак, я создал обе таблицы, используя
CREATE TABLE `phones` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`persons_id` int(11) DEFAULT NULL,
`phonenumber` int(5) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `phones_ibfk_1` (`persons_id`),
CONSTRAINT `phones_ibfk_1` FOREIGN KEY (`persons_id`) REFERENCES `persons` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8`
Но это не проверить, что я хочу. Что я хочу знать, если это возможно, сделайте запрос вроде ALTER TABLE phones ADD CONSTRAINT chk_person CHECK (persons.allowed > 0)
. Это возможно? Есть еще одна альтернатива?
Бесцельное усилие. Если 'allowed' равно' 0', то в вашем коде serveride просто не выполняются вставки. Реляционные базы данных заботятся о ** отношениях **, а не ** разрешениях **. Кроме того, если у человека есть 'n' записи в' phone' и вы устанавливаете '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Вам не нужно использовать РСУБД, чтобы делать что-то отдельное, оно заботится о данных, а не о том, что кто-то может или не может сделать. – Mjh
@Mjh DB заботится о целостности данных. –
@Golinmarq Вам, вероятно, понадобится триггер, чтобы справиться с этим ограничением. –