2012-05-01 1 views
0

У меня есть таблица «комментарии», содержащая базовое поле «id» «auto-inc PK», а также поле «тип». В других таблицах я хочу иметь ссылочную целостность, применяя CONSTRAINT к comments.id И ТАКЖЕ «тип», используя фиксированное значение для значения типа.Ограничение MySQL с использованием фиксированного «жестко закодированного» значения - возможно ли это?

Пример: в таблице «question_comments_rate», я хочу, чтобы «comment_id» существовал как поле «id» в таблице «комментарии» [это простая часть] И ТАКЖЕ, что столбец «type» равен « вопрос".

Есть ли это? Как я могу написать это объявление ограничения?

Это как «условное ограничение» - не только поле «comment_id» должно существовать как «comments.id», но и этот «id» в таблице «comments» должен иметь строку, где «type» is равный «вопрос» (или другое указанное значение) ...

Надеюсь, что проблема ясна. Я могу сделать это более ясным с вашей помощью/обратной связью. Благодарю.

ответ

3

Это было бы CHECK ограничение, о котором говорит MySQL manual:

Предложение CHECK анализируется, но игнорируется всеми механизмами хранения.

Вы можете создать триггеры для вставки/обновления, чтобы обеспечить соблюдение ваших проверок здравомыслия.

Или, в вашем случае, вы могли бы сделать тип данных вашего type колонка ENUM('question') так, что она не может принимать любое другое значения (кроме '', что все ENUM типов могут быть - например, если они установлены на недопустимое значение).

+0

Спасибо, eggyal. Я видел (и подтвердил) ваш ответ, как только он появился ... Я жду, чтобы увидеть, есть ли у кого-то другая идея, но кажется, что это просто невозможно ... Моя колонка «Тип» должна быть способна принимать другие значения, а не только «вопрос» ... Кажется, я буду делать эту проверку на уровне PHP - это серверный язык, который я использую в этом случае. –

+0

Если значения, которые 'type' могут содержать, перечислимы (то есть вы можете перечислить их все), вы можете (действительно, * should *) по-прежнему использовать' ENUM': например. 'ENUM ('вопрос', 'ответ', 'комментарий', 'Wibble');'. – eggyal

+0

@ J.Bruni: Вы видели мой комментарий выше? – eggyal

 Смежные вопросы

  • Нет связанных вопросов^_^