Как заставить городской объект иметь свое имя доступным на всех языках (языках)? - PullRequest
0 голосов
/ 06 июля 2019

Я хотел бы создать базу данных, в которой название города ДОЛЖНО существует во всех доступных локалях (языках). В настоящее время я работаю в следующих местах:

ru , fr , it и es .

Моя первоначальная мысль - сохранить имя в таблице cities, но вместо поля one name у меня будет name-en, name-fr , name-es и name-it.

Таким образом, лондонский город будет сохранен в таблице cities следующим образом:

enter image description here

Моя вторая мысль заключается в том, что было бы более подходящим для производства иметь таблицу всех обслуживаемых locales, чтобы после добавления новой локали она автоматически появлялась на веб-сайте как дополнительная опция. Таким образом, я сделал это ERD:

ER diagram

Это означает, что значение «многие ко многим» между City и Locale приведет к созданию следующей таблицы:

enter image description here

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

Примечание: Это назначение по найму, поэтому у меня нет конкретных бизнес-правил, если вспомнить умное и масштабируемое решение.

Спасибо.

1 Ответ

1 голос
/ 06 июля 2019

В первом решении вы можете использовать ограничение check:

alter table t add constraint check_all_names
    check (name_en is not null and name_fr is not null and name_es is not null and name_it is not null);

Второе в принципе невозможно при хорошо спроектированной модели данных в SQL.Почему?

  • Для вставки в city_locales вам нужен действительный city_id.
  • По определению, вы не можете иметь действительный city_id, пока у вас не будут все локали.

Кроме того, ограничения, как правило, должны быть истинными при вставке строк.Вы не можете вставить одну строку в city_locales и иметь ограничение true (при условии, что у вас более одного locale).

Одним из способов обойти это было бы иметь флаг в таблице cities, которыйуказывает, созданы ли все локали.Вы можете обновить количество языков, используя триггер.Или вы можете использовать вид и вычислить флаг на лету.

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