2010-05-24 5 views
0

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

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

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


Tbl-Статьи
ID
CategoryID

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

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

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

Спасибо.

ответ

1

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

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

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

HTH

+0

Спасибо, это было то, что я искал. Выяснили что-то подобное, используя две таблицы вместо трех. Это было более общим. Спасибо. Один вопрос: - Является ли название в таблице категории преднамеренным или опечаткой? – Max

+0

Добро пожаловать, и я дал имя намеренно ... Я имел в виду CategoryName – Raja

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