SQL несколько первичных ключей - локализация - PullRequest
0 голосов
/ 25 мая 2010

Я пытаюсь реализовать некоторую локализацию в моей базе данных.

Это выглядит примерно так (префиксы только для пояснения)

TBL-Категории
ID
Язык
Имя


TBL-статья
ID
CategoryID

Теперь в моих tbl-категориях я хочу, чтобы первичные ключи содержали идентификатор и язык, чтобы каждая комбинация идентификатора и языка была уникальной. В tbl-Articles я хотел бы использовать внешний ключ для ссылки на идентификатор в категориях, но не на язык, поскольку я не хочу привязывать статью к определенному языку, только к категории.

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

У вас есть идеи, как я могу решить это элегантно?

Спасибо.

1 Ответ

1 голос
/ 25 мая 2010

Учитывая сценарий, вам нужно установить отношения один ко многим между категорией и языком. Создайте 3 таблицы:

  1. Категория с CategoryID и именем в виде столбцов
  2. Язык с идентификатором языка и именем в виде столбцов
  3. CategoryLanguage с CategoryLanguageId, CategoryID и LanguageID (создайте составной первичный ключ на CategoryId и LanguageId, который устанавливает уникальность)

Вам не нужно ничего делать с таблицей «Статьи», поскольку ID и CategoryId устанавливают, что статья может относиться к одной из категорий, но не зависит от языка.

НТН

...