Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Сохранение текстов на разных языках в базе данных

2187  1 2 3 4 5 6 все
AlexNek патриот13.11.21 16:30
AlexNek
NEW 13.11.21 16:30 
в ответ alex445 13.11.21 16:08

Ну именно так как и и сказал

#21 
alex445 старожил13.11.21 16:32
NEW 13.11.21 16:32 
в ответ AlexNek 13.11.21 16:30, Последний раз изменено 13.11.21 16:43 (alex445)

Примерно так. Только связь между городом (улицей) и таблицей связей 1-*.

#22 
AlexNek патриот13.11.21 16:39
AlexNek
NEW 13.11.21 16:39 
в ответ alex445 13.11.21 16:13
какую на самом деле задачу решаете.

Есть/проектируется какая то база данных, ну например, поставщики товаров с адресами и товарами.

Таблиц и связей достаточно, уж точно больше десяти.


База заполняется, допустим на немецком. Но есть хотелка, что бы информация записанная в базе была доступна еще и на других языках.

Интересно обсудить варианты решения, найти + и -.

#23 
AlexNek патриот13.11.21 16:43
AlexNek
NEW 13.11.21 16:43 
в ответ BSDLamer 13.11.21 16:15
можно подумать об использовании CDN
Ну это уже другая проблема, но не думаю что гугл переводчик будет справляться с большим потоком переводов
#24 
alex445 старожил13.11.21 16:43
NEW 13.11.21 16:43 
в ответ alex445 13.11.21 16:32, Последний раз изменено 13.11.21 16:45 (alex445)
Примерно так. Только связь между городом (улицей) и таблицей связей 1-*.

Или, если я правильно понимаю, если в таблице связей ключ будет составной (из двух айдишников - города и языка, например), то связь между городом и таблицей связей можно сделать 1-1?

#25 
alex445 старожил13.11.21 16:44
NEW 13.11.21 16:44 
в ответ AlexNek 13.11.21 16:39

Есть/проектируется какая то база данных, ну например, поставщики товаров с адресами и товарами.

Таблиц и связей достаточно, уж точно больше десяти.


База заполняется, допустим на немецком. Но есть хотелка, что бы информация записанная в базе была доступна еще и на других языках.

Интересно обсудить варианты решения, найти + и -.

Т.е. задача идентична городам и улицам. Решение предлагается то же.

#26 
AlexNek патриот13.11.21 16:50
AlexNek
NEW 13.11.21 16:50 
в ответ alex445 13.11.21 16:44
Т.е. задача идентична городам и улицам

Исключая того, что городов и улиц в базе может не быть вообще.

И не обязательно база реляционная и не обязательно только одна спок

#27 
alex445 старожил13.11.21 16:52
NEW 13.11.21 16:52 
в ответ AlexNek 13.11.21 16:30

По-моему, лучше всё же добавить в таблицу связей отдельный суррогатный ключ, и сделать связи City 1 - * CityLang * - 1 Lang. Но я в базах данных не настолько силён. Как там будет обрабатываться составной ключ, если удалить или обновить, скажем, запись в таблице языков. Одни говорят, что это медленнее, чем когда есть отдельный простой суррогатный ключ для записи, а не составной из айдишников связанных записей. Другие говорят, что дополнительный суррогатный ключ не нужен. Хотя его наличие ничего особо не усложняет и места силно не занимает.

#28 
alex445 старожил13.11.21 16:58
NEW 13.11.21 16:58 
в ответ AlexNek 13.11.21 16:50

Исключая того, что городов и улиц в базе может не быть вообще.

И не обязательно база реляционная и не обязательно только одна

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


Как предлагал Мурр, вы можете локализованные данные хранить хоть в ДЛЛках, хоть в ресурсных файлах (как у меня). Но всё равно где-то должны будете прописать, что этот файл относится к такой-то локали и в нём лежит строка, хранящая имя города, например. Т.е. в той же БД создать таблицу, где всё это указать. Т.е. не вижу смысла выходить за рамки относительной БД, если отношения между сущностями в реальном мире так и так есть. Разве что кто-то раньше уже написал всё это именно в нереляционном стиле, а теперь нужно прикрутить локализацию. Ну значит, придётся городить реляционный костыль, покрывая нереляционные данные.

#29 
BSDLamer Хвостатый Carpal Tunnel13.11.21 17:24
BSDLamer
NEW 13.11.21 17:24 
в ответ AlexNek 13.11.21 16:43

CDN нужен чтоб бросать уже переведенный ресурс в кэш и этим самым разгрузить бэкенд

0001, 0010, 0011, 0100, 0101, вышел зайчег погулядь
#30 
MrSanders коренной житель13.11.21 18:56
NEW 13.11.21 18:56 
в ответ AlexNek 13.11.21 16:50

Исключая того, что городов и улиц в базе может не быть вообще.

И не обязательно база реляционная и не обязательно только одна спок

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

Что надо-то? id-язык-перевод куда-то запихни. Хошь ресурсы, хошь РБД, хошь NoSQL, хошь через REST доступ к данным в CDN делай. Но ни в коем разе не записи для каждого языка "City_EN, City_DE" или лепить несколько переводов в одну запись "Köln|Cologne".

#31 
alex445 старожил13.11.21 18:59
NEW 13.11.21 18:59 
в ответ MrSanders 13.11.21 18:56, Последний раз изменено 13.11.21 19:00 (alex445)
Но ни в коем разе не записи для каждого языка "City_EN, City_DE" или лепить несколько переводов в одну запись "Köln|Cologne".

Почему? Очень быстрое и простое решение. Может, там большего и не требуется.


Если бы кто-то где-то в мире обладал статистикой по принятым архитектурным решениям (пусть даже в разных областях), то уверен, что подобные бы превалировали с большим отрывом.

#32 
MrSanders коренной житель13.11.21 19:27
NEW 13.11.21 19:27 
в ответ alex445 13.11.21 18:59
Почему? Очень быстрое и простое решение. Может, там большего и не требуется.

Такое решение вообще существовать не должно. Только в скриптике, написанном за 15 минут и через 2 дня забытом.

Медленное, хрупкое, плохо скалируется.

то уверен, что подобные бы превалировали с большим отрывом.

Не сомневаюсь. "95% людей - идиоты"

#33 
AlexNek патриот13.11.21 19:54
AlexNek
NEW 13.11.21 19:54 
в ответ MrSanders 13.11.21 18:56
а потом жаловаться

Нормальный концепт должен это пережить.


id-язык-перевод куда-то запихни

ну так предложений уже сколько было.

Я так понимаю некий глобальный ресурс? А как потом редактировать запись в таблице, через посредника?

#34 
uscheswoi_82 старожил13.11.21 20:16
NEW 13.11.21 20:16 
в ответ AlexNek 13.11.21 16:09
И с задержкой перевода, страницу ведь можно показать только после полного перевода всего что там есть.

Вообще база данных нужна в основном для поиска. Я бы перевод хранил бы в XML или в JSON формате. Когда буду делать один проект, всё будет храниться в формате HTML или в формате JSON.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#35 
alex445 старожил13.11.21 20:37
NEW 13.11.21 20:37 
в ответ uscheswoi_82 13.11.21 20:16

Если не писать дурацких запросов с условиями, где вытаскиваются длинные строковые поля, что-то там сравнивается, сплитится, мерджится, а тупо по айдишникам и связям, то всё будет работать быстро и чётко. А всякие интероперабилити с подгрузом ДЛЛек, открытием файлов, чтением их и прочая муть сожрёт всю производительность. Толкай всё в БД и не думай, если объёмы не сверхбольшие.

#36 
AlexNek патриот13.11.21 20:44
AlexNek
NEW 13.11.21 20:44 
в ответ uscheswoi_82 13.11.21 20:16
Я бы перевод хранил бы в XML

И как он интересно тута попадёт?

#37 
MrSanders коренной житель13.11.21 21:04
NEW 13.11.21 21:04 
в ответ AlexNek 13.11.21 19:54
Я так понимаю некий глобальный ресурс? А как потом редактировать запись в таблице, через посредника?

Да кто ж тебя знает. Куда надо. Что ты делаешь-то? Может тебе надо десктопное приложение, способное работать в оффлайне. Тогда отдельная ДБ и доступ к онлайн ресурсам слегка затруднён. А может клиент-сервер? Тогда ДБ хорошее решение. А может веб-приложение доступное по всему миру? CDN в руки. Редактировать часто будем? Да - скорее БД. Нет - скорее CDN/ресурсы. Объём данных? Большой - БД/CDN. Маленький - ресурсы. Крохотный - да хоть в код влепи.

#38 
AlexNek патриот13.11.21 21:41
AlexNek
NEW 13.11.21 21:41 
в ответ MrSanders 13.11.21 21:04
Может тебе надо десктопное приложение,

Десктоп видимо уже не попадется...

#39 
uscheswoi_82 старожил13.11.21 21:48
NEW 13.11.21 21:48 
в ответ AlexNek 13.11.21 20:44
И как он интересно тута попадёт?

Так-же как и в БД. Только XML это устаревший вариант, сейчас модно JSON. Пример:

index.html:

<!DOCTYPE html>
<head>
<title>Test</title>
<script>
  var lang = 'ru';
  window.onload = () => {
    fetch('demo.json').then(response => response.json()).then(data => { 
      let json_items = JSON.parse(JSON.stringify(data)); 
      let el = document.getElementById('city');
      for(let index=0; index<json_items.cities.length; index++) {
        let new_el = document.createElement('option');
        new_el.setAttribute('value', json_items.cities[index].id);
        new_el.innerHTML = json_items.cities[index][lang];
        el.appendChild(new_el);
      }
    });
  }
</script>
</head>
<body>
  <select id="city">
  </select>
</body>


demo.json:

{"cities":
  [
  {"id":1, "ru":"Moskva", "de":"Moskau", "en": "Moscow"},
  {"id":2, "ru":"Keln", "de":"Köln", "en":"Cologn"}
  ]
}


Результат см. https://i.ibb.co/LQkd6QJ/json-demos-result-min.jpg


Вообще если использовать NOSQL то проблема решается в два счёта. См.:

https://i.ibb.co/Kyz0zG5/mongo0-min.jpg

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#40 
1 2 3 4 5 6 все