Вам понадобится Languages
table
, как
Языки (идентификатор, имя)
Также вам понадобится ItemDescriptions
table
, например
ItemDescription (идентификатор, itemId, languageID, содержимое)
Вы будете insert
values
в Languages
table
, как
60, 'English'
180, 'Hungarian'
записей в таблицу элементов, как
1, 'Toothpaste'
и записи в таблицу ItemDescription, например,
1, 1, 60, 'Best Toothpaste'
2, 1, 180, 'Legjobb Fogkrém'
, поэтому у вас будет одна запись в Items
table
для каждого элемента, одна запись в Languages
table
для каждого языка и столько же записей в ItemDescriptions
table
, сколько Languages
они переведены на.
EDIT
Оказывается, существует несколько языков и несколько описаний для каждого языка. Итак, нам нужно изменить определение ItemDescriptions
на
ItemDescription (id, itemId, languageID, content60, content180,
content300)
поэтому каждая запись будет содержать все соответствующие описания.
* * EDIT2 тысяча сорок-девять
Поскольку вы описали, что вам понадобятся дополнительные данные для каждого описания, становится ясно, что данное описание больше не будет атрибутом, а записью. Это означает, что у нас есть два возможных решения (для обоих решений я избегаю определения дополнительных данных из-за недостатка информации, но вы сможете определить их соответствующие столбцы):
Первое решение
ItemDescription (id, itemId, languageID, content, maxLength)
, где maxLength
может быть 60, 180, 300 соответственно. Ваши дополнительные значения будут столбцами внутри ItemDescriptions
table
. Если вы используете varchar(300)
для content
, то вы не будете использовать ненужные байты для хранения значений в content
.
Второе решение
ItemDescription80 (id, itemId, languageID, content)
ItemDescription180 (id, itemId, languageID, content)
ItemDescription300 (id, itemId, languageID, content)
В этих отдельных таблицах будут храниться отдельные значения, и в этом случае вам потребуются отдельные столбцы в каждой таблице с дополнительными данными.
* * Сравнение тысячи семьдесят-девять
Если вы используете varchar
в качестве типа для content
, то первый подход, по-видимому, превосходит второй с точки зрения простоты обработки, однако всякий раз, когда вы insert
или update
получаете значение там вам нужно убедиться, что maxLength
является действительным (равно 60, 180 или 300 соответственно) и что content
не длиннее maxLength
. Вы можете сделать это из своего приложения или через уровень записи trigger
on
insert
or
update
.