powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильнее и лутше?
19 сообщений из 19, страница 1 из 1
Как правильнее и лутше?
    #37103998
Ahilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю структуру базы данных. В базе данных хранятся переводы фраз на разных языках.
1. способ - таблица "справочник языков" (Код (первичный ключ), название языка (строка), название таблици в которой хранятся фразы (строка))
-таблица "Фразы на английском языке" (Код фразы (первичный ключ), фраза (строка))
-таблица "Фразы на французком языке" (Код фразы (первичный ключ), фраза (строка))
-и тд.
Таблици фраз создаются по мере появления новых языков

2. способ - таблица "справочник языков" (Код (первичный ключ), название языка (строка))
-таблица "Фразы" (Код фразы + Код языка (ключ), фраза (строка)).

Интерисует ваше мнение.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37104147
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AhillesИнтерисует ваше мнение.
отдельные таблицы на каждый язык сразу ф топку
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37104674
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ahilles,

перечень языков TLang (id,Name)
перечень фраз TF (TLang.id1,TLang.id2,...TLang.idN)
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37104735
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И переводы можно не хранить:)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
set scan off
with t as (
   select 'fish' txt from dual union all
   select 'dog' txt from dual union all
   select 'cat' txt from dual 
)
select txt, regexp_substr(tr, '<span id=result_box class="short_text"><span[^>]*>(.*)</span></span>',  1 ,  1 , 'i',  1 ) перевод
from (
   select txt, httpuritype('http://translate.google.com/?hl=ru&layout=1&eotf=1&sl=en&tl=ru&text='||utl_url.escape(txt)||'#').getclob() tr
   from t
);

TXT  ПЕРЕВОД
---- -------
fish рыба   
dog  собака 
cat  кошка  
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37105000
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AhillesСоздаю структуру базы данных. В базе данных хранятся переводы фраз на разных языках.
1. способ - таблица "справочник языков" (Код (первичный ключ), название языка (строка), название таблици в которой хранятся фразы (строка))
-таблица "Фразы на английском языке" (Код фразы (первичный ключ), фраза (строка))
-таблица "Фразы на французком языке" (Код фразы (первичный ключ), фраза (строка))
-и тд.
Таблици фраз создаются по мере появления новых языков

2. способ - таблица "справочник языков" (Код (первичный ключ), название языка (строка))
-таблица "Фразы" (Код фразы + Код языка (ключ), фраза (строка)).

Интерисует ваше мнение.

Способ 2, конечно же.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37105013
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying DutchmanAhillesСоздаю структуру базы данных. В базе данных хранятся переводы фраз на разных языках.
1. способ - таблица "справочник языков" (Код (первичный ключ), название языка (строка), название таблици в которой хранятся фразы (строка))
-таблица "Фразы на английском языке" (Код фразы (первичный ключ), фраза (строка))
-таблица "Фразы на французком языке" (Код фразы (первичный ключ), фраза (строка))
-и тд.
Таблици фраз создаются по мере появления новых языков

2. способ - таблица "справочник языков" (Код (первичный ключ), название языка (строка))
-таблица "Фразы" (Код фразы + Код языка (ключ), фраза (строка)).

Интерисует ваше мнение.

Способ 2, конечно же.

Хотя я в своих проектах в таких случаю использую 3 таблицы - 2 такие, как в случае 2 плюс справочник фраз.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37105103
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying DutchmanFlying Dutchmanпропущено...Способ 2, конечно же.Хотя я в своих проектах в таких случаю использую 3 таблицы - 2 такие, как в случае 2 плюс справочник фраз.а справочник фраз зачем нужен? можно вас попросить пример коротенький?
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37105133
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychа справочник фраз зачем нужен?чтобы было проще валидировать по справочнику букв.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37105540
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychFlying Dutchmanпропущено...
Хотя я в своих проектах в таких случаю использую 3 таблицы - 2 такие, как в случае 2 плюс справочник фраз.а справочник фраз зачем нужен? можно вас попросить пример коротенький?

1. Справочник фраз может содержать дополнительную информацию, одну и ту же для фразы независимо от перевода. Например, если фраза - это сообщение об ошибке в некой системе, то справочник фраз может содержать такие, например, атрибуты, как "уровень серьезности", "внутренний код ошибки" и т.д.

2. В справочнике может быть атрибут "имя фразы". Рассмотрим случай, когда фраза - это название товара в каталоге товаров веб-магазина. В этом случае "перевод фразы" - это название товара, которое видит покупатель на своем языке на веб-сайте магазина, а "имя фразы" - это внутреннее название товара, который используют разработчики и адинистраторы магазина. В этом случае важно отметить, что переводы имен товаров могуть быть одними и теми же для разных товаров, но внутреннее имя товара всегда уникально.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37105588
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying Dutchman, я понял, спасибо за пояснения
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37109416
Донаркан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь может аргументировано пояснить - какие недостатки у первого метода реализации? Есть мнение что метод плох, так как в нём будут использоваться динамические запросы. А в чём тогда недостатки динамических запросов?
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37109954
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Донаркан,

Когда пару пользователей будут пользовать, то я думаю ничего страшного. А вот если с полсотни или больше? А если еще и ресурсы ограничены? Вывод я думаю понятен.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37109963
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДонарканКто-нибудь может аргументировано пояснить - какие недостатки у первого метода реализации?
чтобы добавить еще один язык будешь еще одну табличку рисовать?
и зачем тебе десяток одинаковых табличек?
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37110317
ultra_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже однозначно за 2-й способ.

ДонарканКто-нибудь может аргументировано пояснить - какие недостатки у первого метода реализации?
1. Для каждого языка придется новую одинаковую табличку создавать
2. Также придется создавать сопутствующие ХП для каждой таблички, либо параметрические запросы в ХП, либо вообще без ХП. ИМХО этот путь не самый удобный
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37111798
Донаркан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поясню ход моих мыслей, возможно неправильный, так как с механизмами работы внутри самой MySQL знаком плохо.

Во-первых - запрос к БД осуществляется из РНР и разве для БД есть разница - статично задана в скрипте строка запроса или имя таблицы в неё подставлено при составлении строки?

Во-вторых. При наличии в системе 30 поддерживаемых языков, в каждом из которых перевод 2000 терминов, получается что при хранении всей информации в одной таблице её размер будет 60000 строк и поиск в ней придется осуществлять по индексу, составленному из двух полей - "язык + идентификатор строки". Если для каждого языка будет своя таблица, то в ней будет 2000 записей и поиск будет по индексу на основе одного поля "идентификатор строки". Выигрыша в производительности не будет?

То, что будет создано много таблиц - по одной на каждый язык, тут да, возможно минус (в phpMyAdmin долго листать :). Но на производительности это сказаться не должно.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37111836
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Донарканполучается что при хранении всей информации в одной таблице её размер будет 60000 строк и поиск в ней придется осуществлять по индексу, составленному из двух полей - "язык + идентификатор строки".От того, что разбить на отдельные таблицы, строк меньше не станет. А выборка таблицы по имени из словаря чем-то сродни составному индексу, только будет задействовано больше объектов на пути выхода на адрес конкретной строки.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37112090
Фотография Chop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДонарканВо-первых - запрос к БД осуществляется из РНР и разве для БД есть разница - статично задана в скрипте строка запроса или имя таблицы в неё подставлено при составлении строки?
для БД все-равно, откуда ты имя таблицы возьмешь - она получит строку запроса
а вот для тебя...
откуда ты будешь брать имя таблицы при 30-ти языках?
в коде пхп хранить и переписывать код при каждом добавлении/удаления языка?
или табличку в БД создашь и будешь ее дергать каждый раз, чтобы сформировать запрос?
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37112101
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДонарканВо-первых - запрос к БД осуществляется из РНР и разве для БД есть разница - статично задана в скрипте строка запроса или имя таблицы в неё подставлено при составлении строки?

Возьмите и проверьте. Когда сам уткнешся во что-то - это лучше любых советов. И запоминается навсегда.

ДонарканВо-вторых. При наличии в системе 30 поддерживаемых языков, в каждом из которых перевод 2000 терминов, получается что при хранении всей информации в одной таблице её размер будет 60000 ...

Будет все те же 2000 строк, но столбцов будет 30.
...
Рейтинг: 0 / 0
Как правильнее и лутше?
    #37112529
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДонарканКто-нибудь может аргументировано пояснить - какие недостатки у первого метода реализации? Есть мнение что метод плох, так как в нём будут использоваться динамические запросы. А в чём тогда недостатки динамических запросов?

По поводу недостатков метода 1:

1. Несколько таблиц хуже, чем одна, потому что
- Выше стоимость сопровождения: при добавлении нового языка нужно добавить новую таблицу, ключи, индексы, права для нее и т.д., то есть DBA должен потратить на это свое время.

2. Сложно запросы, требующие данные по всем языкам сразу, например:

"Получить список используемых языков + количество переводов фраз по каждому языку"

"Для каких языков отсутствует перевод фразы с Id = 1 ?"

3. Динамические запросы хуже статических (если мы говорим о хранимых процедурах), потому что:
- Код получается более сложным
- Ошибки в статическом SQL выявляются на этапе компиляции, а в динамическом - только на этапе выполнения запроса.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильнее и лутше?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]