Как создать запись и назначить 1 из 3 подтипов, каждый из которых имеет разные свойства - PullRequest
0 голосов
/ 23 сентября 2011

Я строю схему для базы данных MySQL.У меня есть таблица под названием «запись» (супертип).Запись может быть «фото», «эссе» или «видео» (подтип).Каждый подтип имеет разные свойства / столбцы.

Мой текущий дизайн требует таблицы записей и отдельной таблицы для каждого из трех подтипов.

Schema

Подтипы связаны с записью в записях через внешний ключ к атрибуту id таблицы записей.У меня вопрос, как я могу изменить этот дизайн, чтобы ограничить запись только одним типом подтипа.В настоящее время несколько подтипов могут быть связаны с одной и той же записью записей.

Ответы [ 2 ]

1 голос
/ 23 сентября 2011

Вы не можете легко сделать это декларативно в SQL.Что вы хотите сделать, так это поместить CONSTRAINT в первичный ключ, который используется всеми четырьмя таблицами, чтобы ключ существовал в entries (это нормально, это ПЕРВИЧНЫЙ КЛЮЧ) и чтобы он не существовал в . либо двух других таблиц.Эта вторая часть не имеет соответствующего типа ограничения в SQL.

Вы в основном застряли с TRIGGER.(Вы можете сделать это в некоторых других движках с CHECK CONSTRAINT, который содержит подзапрос, но я не думаю, что MySQL вообще поддерживает CHECK CONSTRAINTs, и некоторые движки не будут смотреть вне текущей строки при оценкеПРОВЕРЬТЕ КОНТРОЛЬ).

1 голос
/ 23 сентября 2011

Я не совсем уверен, что это лучший способ сделать это, но вот вариант:

CREATE TABLE `entries` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `type` enum('photo','essay','video') NOT NULL DEFAULT 'photo',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Здесь я думаю, что вы вводите только одну запись в таблице записей для каждого имени, следовательно, УНИКАЛЬНЫЙ КЛЮЧ, а тип enum по существу сообщает вам, к какой таблице следует присоединиться.

Это может быть совершенно неуместно, в зависимости от того, как вы хотите использовать / выбирать данные из таблицы (таблиц), учтите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...