Односторонний заинтересованность или две таблицы?

StackOverflow https://stackoverflow.com/questions/715745

Вопрос

Предположим, у меня есть таблица со следующими столбцами (список слов):

word: varchar
contributor: integer (FK)

Теперь предположим, что я хочу иметь переводы для каждого «слова». Что будет лучше? Есть второй таблицу?

word: integer (FK)
translation: varchar
contributor: integer (FK)
lang: integer (FK)

Или все в одной таблице?

word: varchar
translation_for: integer (FK - to the same table)
contributor: integer (FK)
lang: integer (FK)

Предположим, что два сценария, (1), где мне нужно вытащить переведенное слово вместе с исходным словом оно было переведено из, (2), где мне нужно потянуть Только переведенное слово. В обоих сценариях я бы гораздо сильнее использовал «оригинальные» слова (оба Выбор а также Обновление/вставка).

Итак, какой подход будет лучше для каждого сценария или в целом? Я склонен к первому подходу, с тех пор мои выборы «по умолчанию» не должны быть квалифицированы ланг столбец. Что вы думаете?

Спасибо!

Это было полезно?

Решение

Я думаю, что вы будете больно позже, если вы хотите добавить язык позже, если вы сейчас не нормализуете базу данных. Иметь таблицу слов, где слово находится на языке по умолчанию. У него есть удостоверение личности. Иметь языковую таблицу с идентификатором (т.е. испанский, 2) и таблица перевода, в которой есть слово идентификатор, идентификатор языка и, наконец, фактическое слово на этом языке. Это связанная таблица.

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

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

Другие советы

Поскольку вы, кажется, хотите, чтобы «слово» имело идентичность отдельно от «переведенного слова», тогда я думаю, что 1 -й вариант удовлетворяет ваши потребности лучше.

Обычно я думаю, что дизайн больше похож на:

PK (Key (varchar), Lang (FK)), Word (nvarchar)

Было бы более уместным - где вы ссылаетесь только на текст его ключом и значением Lang. Но, похоже, вы заменяете ключ «оригинальным словом» - так что это немного отличается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top