|
Тема
|
Проектиране на многоезична база данни
|
|
Автор | Unit-731 (Нерегистриран) |
Публикувано | 20.06.05 23:28 |
|
Някой проектирал ли е база данни, която трябва да поддържа различни езици ?
Ако е система за новини, не е проблем в една таблица да има полета content_bg, content_en, content_de, но при по-голяма система, където от 30 в 25 таблици ще има изредени полета за съответния език, май вече става доста неудачно, ако не от към производителност, то добавянето на нов език в системата ще бъде кошмар.
Дадоха ми такава идея:
Таблица `Languages`: Id, Name...
Таблица `News`: Id, LanguageId, Content...
Това е добре, но ако таблицата news съдържа и други колони - date, featured.... това значи, че или ще използвам една таблица за всички езични записи и ще има дублиращи се данни или ще трябва да правя отделна таблица за 'неезичните' данни (date, featured...).
И пак нещата не са толкова зле, ако имам само една таблиза, в която ще има многоезични данни, проблема е, че аз имам 20 такива таблици.
Я кажете вие какви подходи ползвате ?
| |
Тема
|
Re: Проектиране на многоезична база данни
[re: Unit-731]
|
|
Автор | ьь (Нерегистриран) |
Публикувано | 21.06.05 16:14 |
|
Аз за малко опитах подхода с поддържане на многоезичните данни в една таблица.
Като казвам "за малко", имам предвид до изпълнението на първата реална заявка за търсене (като многоезичните полета участват в where-клаузата). Проблемите идваха от това, че в един обект имаше множество полета, които се поддържаха на два език. Това налагаше много пъти многоезичната таблица да се join-ва със себе си.
И така...
Лош performance.
Базата беше SQL Server. Сложихме полетата по таблиците.
| |
Тема
|
Re: Проектиране на многоезична база данни
[re: Unit-731]
|
|
Автор |
NDeu (динозавър) |
Публикувано | 21.06.05 16:27 |
|
Ами много добра идея са ти дали.
А, щом имаш и "неезични" данни, най-логичното е да ги изнесеш в отделна таблица.
Структурата ти става:
Таблица `Languages`: Id, Name... (PK Id)
Таблица `News`: Id, date, featured... (PK Id)
Таблица `LangNews`: NewsId, LanguageId, Content... (PK NewsId,LanguageId; FK NewsId; FK LanguageId)
И не е страшно, че са 20 таблици.
| |
Тема
|
Re: Проектиране на многоезична база данни
[re: NDeu]
|
|
Автор | Unit-731 (Нерегистриран) |
Публикувано | 21.06.05 16:36 |
|
Това означава за всяка от 20-те таблици да изнеса по една за "многоезичните" данни ?
| |
Тема
|
Re: Проектиране на многоезична база данни
[re: Unit-731]
|
|
Автор |
salle (един такъв) |
Публикувано | 21.06.05 20:57 |
|
Точно така.
Всъщност подходът е същия при т.нар. Лкоализация на софтуер.
На практика създаваш речници които могат да се превеждат повече или по-малко независимо на различни езици и след това тези речници се използват на различни места в софтуера. Връзката е някакъв идентификатор като например Номер на грешка по който се вади съответният текст на съответния език.
| |
Тема
|
Re: Проектиране на многоезична база данни
[re: salle]
|
|
Автор | Unit-731 (Нерегистриран) |
Публикувано | 21.06.05 21:10 |
|
А какъв подход ще ми препоръчаш за многоезичност на интерфейса ?
Файлове с масиви (или отделни променливи), който съдържат елементите на сайта и зависимост от текущата сесия (т.е. избрания език) да зареждам съответните променливи ?
| |
Тема
|
Re: Проектиране на многоезична база данни
[re: Unit-731]
|
|
Автор |
salle (един такъв) |
Публикувано | 21.06.05 22:24 |
|
s/файлове/таблици в базата данни/g
| |
Тема
|
Re: Проектиране на многоезична база данни
[re: salle]
|
|
Автор | Unit-731 (Нерегистриран) |
Публикувано | 22.06.05 09:30 |
|
Нещо не мога да ти схвана шифъра на съобщението - да сложа файловете в базата данни ?
| |
|
|
|
|