2016-02-15 2 views
0

У меня более 25 лет опыта работы с различными платформами СУБД, в основном с Oracle, SqlServer и Sybase, но также с MySQL (и другими). Я пытаюсь сделать что-то сейчас с MySQL, что мне никогда не приходилось делать раньше, и я подозреваю, что это невозможно (в любой СУБД), но, возможно, у кого-то есть идея.Сложное требование внешнего ключа MySQL к двум таблицам

Я создаю базу данных из данных CLDR для глобализации/локализации, и у меня есть две таблицы, которые определяют все локали, которые мое приложение будет поддерживать.

TABLE supported_language: 
    COLUMN language_code VARCHAR(4) (PK) 

TABLE supported_territory: 
    COLUMN language_code VARCHAR(4) (PK, FK to supported_language.language_code) 
    COLUMN territory VARCHAR(10) (PK) 

CLDR локали может быть просто язык или язык-территория комбо, поэтому, чтобы получить полный список всех поддерживаемых локалей я должен либо внешнее соединение двух таблиц или сделать союз. Теперь мне нужно ограничить различные другие таблицы, поэтому они ссылаются только на допустимые поддерживаемые локали, то есть на язык и территорию или только на язык, как определено supported_language и supported_territory. Обычно я делал это с помощью простого внешнего ключа, но поскольку нет единой таблицы, в которой перечислены все языки/территории и только языковые локали, я затрудняюсь, как это сделать.

Как я могу обеспечить, чтобы эти другие таблицы ссылались только на допустимые поддерживаемые комбинации языков/территорий?

ответ

1

Как просто создать эту другую таблицу, которая будет содержать только допустимые поддерживаемые локали и использовать ограничения на нее? Время от времени добавление избыточных (т. Е. Вычисленных) данных в СУБД совсем не плохая идея.

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