Здравствуйте, Makc2, Вы писали:
M>Помимо замедления выборки наличие таблицы ресурсов затрудняет внедрение ОРМ в слой доступа к данным. Да, можно воспользоваться мэппингом на хранимые процедуры. То есть провести лишнюю, совсем необязательную с точки зрения бизнес-логики работу. Напротив, отсутсвие лишней таблицы ресурсов, делает мэппинг тривиальным.
Вот тут можно поподробнее? У меня небольшой пробел в образовании в плане ORMов.
Вот максимально упрощенный пример.
Пусть есть таблица справочных данных REFS с полями: ID — первичный ключ и V_NAME — наименование на языке по умолчанию (например, английский).
А также таблица переводов TRANSLATIONS с полями: ID — первичный ключ, I_ROW_ID — ключ записи в таблице REFS, для которой перевод, V_NAME — строка перевода, C_LANG — язык.
Тогда если выборка обычных данных в системе без поддержки нескольких языков выглядит так:
SELECT ID, V_NAME FROM REFS
то выборка многоязычных данных на каком-то одном языке (здесь-на русском) будет выглядеть так:
SELECT ID, TRANSLATE_FUNC(V_NAME,ID,'ru') V_NAME FROM REFS
При этом принимаем во внимание, что в абсолютном большинстве случаев отображаемые строки используются только для показа пользователю, и самой программой никак особенно не обрабатываются. Кроме того, ситуация, когда надо не просто показать элемент справочника, а выбрать разом все его названия на всех языках мне лично ни разу не встречалась (за исключением случаев поиска по всем языкам сразу, но они тривиально и очень эффективно реализуются соответствующими SQL запросами). То есть я исхожу из того, что строку просто выбрали и показали, никаких исхитрений с кучей языков не производится.
С учетом этого вопрос: как разница между этими двумя запросами помешает работать с ORMом? Или вопрос не в невозможности реализации, а в некоей "концептуальной некорректности"?