2012-04-23 2 views
1

Простая база данных справедливости имеет 3 таблицы: таблицу тикеров, таблицу обмена и таблицу валют. Таблица тикера имеет два столбца: столбец символов (например: IBM) и внешний ключ к строке в таблице обмена. Таблица обмена имеет два столбца: столбец имен (например: NYSE) и внешний ключ в строке в таблице валют. Стол валюты имеет одну колонку: символ (например: USD). (Я оставил столбец первичных ключей для каждой таблицы).Ограничение множества таблиц MySql

Как обеспечить принудительное ограничение того, что не должно быть одного и того же символа кода дважды для одной и той же валюты? то есть я хочу только один (IBM + USD). Недостаточно создать уникальное ограничение на (ticker.symbol + ticker.exchange); (IBM + NASDAQ) является недопустимым, если уже есть (IBM + NYSE). Я думал, что могу создать представление, которое присоединилось к таблице тикера и таблице валют, и создать уникальный индекс (view.ticker + view.currency); однако, насколько я могу теперь сказать, нельзя создать индекс в представлении.

+0

Я не уверен, что это ограничение - отличная идея: компания может быть зарегистрирована на двух биржах в одной валюте - особенно в Европе, где компания может быть зарегистрирована на биржах в двух странах, как в евро. – eggyal

+0

Все в порядке - я не хотел подавлять всех подробностями, но поле на самом деле является «основным обменом». Для каждой строки в таблице тикера может быть много вторичных обменов. Тем не менее, ограничения на отсутствие нескольких строк с одинаковыми (тиккер + валюта) все же кажутся разумными. Спасибо за то, что вы это подумали. – Jimmy

ответ

1

Я не думаю, что это можно указать это ограничение в MySQL, но вы могли использовать triggers, чтобы проверить, что такие комбинации не существуют (подъем ошибки, если они делают); обратите внимание, что вам нужно будет иметь триггеры перед вставкой в ​​таблицу тикера и перед обновлением во всех трех таблицах.

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