Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Строковые константы или отдельные таблицы-справочники ? / 10 сообщений из 10, страница 1 из 1
29.05.2015, 10:46:31
    #38971585
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
Как подобные вопросы принято решать на уровне БД ?
К примеру, некоторая характеристика сущность может принимать несколько качественных значений (состояний). Возможны следующие варианты реализации:
1) Каждое возможное значение представлено числом, которое непосредственно заносится в поле (самый хреновый вариант)
2) Каждое возможное значение представлено понятной строковой константой, которая непосредственно заносятся в таблицу
3) Все возможные значения хранятся в отдельной таблице-справочнике, а в целевую таблицу заносится идентификатор возможного значения

Понятно, что выбор стоит между вариантами 2 и 3 и что применение того или иного варианта в определённой степени зависит от некоторых факторов (и эта зависимость неоднозначна).
В варианте 2 можно избежать необходимость создания перечисления в клиентском приложении, в варианте 3 - нет.

Кто как решает сабж и какими факторами руководствуется ?
...
Рейтинг: 0 / 0
29.05.2015, 10:49:23
    #38971593
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
Обычно выбор определяется количеством вариантов значения. Если их максимум десяток - разумнее использовать ENUM, иначе всё-таки таблицу-словарь.
...
Рейтинг: 0 / 0
29.05.2015, 11:02:08
    #38971609
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
авторОбычно выбор определяется количеством вариантов значения. Если их максимум десяток - разумнее использовать ENUM, иначе всё-таки таблицу-словарь.
Самый железный фактор ( Фактор 1 ), от которого необходимо отталкиваться - могут ли пользователи добавлять новые состояния. Если могут, то однозначно таблица-справочник. Если нет - коптим дальше:

Фактор 2 = количество возможных значений (состояний).
Предположим, вариантов 15. Реализуем вариант 3 (таблица-справочник). В этом случае в клиентском приложении придётся создавать перечисление, ключи (индексы) которых должны совпадать с ключами записей в таблице-справочнике. Попахивает дублированием данных (в масштабе всей программной системы) - придётся всё время следить за соответствием при добавлении (или удалении + добавлении) новых состояний в процессе разработки.

А если данные импортируются и частично обрабатываются в другую программную систему - то уже в 3 местах нужно обеспечивать соответствие. Некошерно получается.

Конечно, это всё касается ситуаций, когда состояния влияют на ход выполнения программы (т.е. когда программа должна знать, что это - именно такое состояние, а это - такое). Но в сабже именно о таких состояниях идёт речь...
...
Рейтинг: 0 / 0
29.05.2015, 11:15:13
    #38971631
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
Cyrax_02Самый железный фактор ( Фактор 1 ), от которого необходимо отталкиваться - могут ли пользователи добавлять новые состояния. Если могут, то однозначно таблица-справочник.В этом случае первые два варианта просто неприменимы, и выбирать собсно не из чего.

Cyrax_02в клиентском приложении придётся создавать перечисление, ключи (индексы) которых должны совпадать с ключами записей в таблице-справочнике. Попахивает дублированием данных
Я, признаться, не могу въехать, о чём речь ведётся. Такое впечатление, что Вы говорите о том, чтобы хардкодить набор вариантов состояний на клиентской стороне. Ибо нет никакой проблемы на старте приложения запросить содержимое словаря и соотв. образом сформировать источник данных необходимого контрола или получить идентификатор варианта по его мнемонике.
При обмене же со сторонними программными комплексами обмен предпочтительно вести именно в мнемонике, особенно если не выполняется онлайновая синхронизация словарей между комплексами. К тому же такой вариант позволяет сформировать вменяемо-читаемую таблицу соответствий (и при необходимости использовать прослойку-конвертор), а в условиях запрета ввода несуществующих в словаре значений опасность опечатки практически нулевая.
...
Рейтинг: 0 / 0
29.05.2015, 11:41:17
    #38971658
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
авторнет никакой проблемы на старте приложения запросить содержимое словаря
Если возможные значения будут представлены строковыми константами или типом ENUM, то как будет выглядеть запрос возможных значений ?

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

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

Код: php
1.
2.
3.
if(value = значение1) { ... }
elseif(value = значение2) { ... }
else { ... }



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

Учитывая, что данные о сущностях (включая эти самые значения) будут передаваться в другую программную систему, которая также должна уметь различать эти значения.

Ваша реализация ?
...
Рейтинг: 0 / 0
29.05.2015, 12:20:22
    #38971700
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
Cyrax_02авторнет никакой проблемы на старте приложения запросить содержимое словаря
Если возможные значения будут представлены строковыми константами или типом ENUM, то как будет выглядеть запрос возможных значений ?
Код: sql
1.
select COLUMN_TYPE from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'имя таблицы' AND COLUMN_NAME = 'имя поля';



Cyrax_02К примеру, некоторая сущность в некотором поле может иметь 5 значений. Для двух из них имеет место свой (индивидуальный) алгоритм обработки, для остальных - общий алгоритм обработки:
Код: php
1.
2.
3.
if(value = значение1) { ... }
elseif(value = значение2) { ... }
else { ... }



Наверное, всё-таки какой-нить там CASE или SWITCH... в пыхах не силён.

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

Учитывая, что данные о сущностях (включая эти самые значения) будут передаваться в другую программную систему, которая также должна уметь различать эти значения.
Подобные ветвления должны организовываться на стороне принимающей данные системы, и там должна быть таблица выбора метода обработки - соответствия между значением поля и неким внутренним для системы индексом (т.е. в коде выше значениеХ - это ни разу не то, что передано из внешней системы, а соответствие переданного значения внутреннему коду метода обработки) используемого для этого значения метода. А как выполняется идентификация значения в этой таблице - по мнемонике или по её индексу - в общем, неважно, проверка-то на равенство. С учётом того, что вероятность изменения мнемоники выше, наверное, предпочтителен внутренний согласованный индекс (из таблицы соответствия подсистемы импорта данных).
...
Рейтинг: 0 / 0
29.05.2015, 13:59:03
    #38971838
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
Akina , любите теоретические рассуждения ?
Кто как делает на практике ?
...
Рейтинг: 0 / 0
29.05.2015, 14:12:58
    #38971850
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
да хоть так хоть эдак сойдет
но лучше справочники использовать
даже если только три возможных значения,
потому что потом вдруг всплывает что нужно еще пункт добавить,
да и на клиенте в виде списка отображать проще
...
Рейтинг: 0 / 0
29.05.2015, 14:18:27
    #38971857
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
Cyrax_02 Akina , любите теоретические рассуждения ?
Кто как делает на практике ?

...на практике люди имеют дело с конкретными задачами,
а не с "...некоторая характеристика сущность может принимать несколько качественных значений .."

Точный ответ вполне симметричный:

в некоторых случаях так-то, в других -- сяк-то.


...а так, советов то много настригать можно...


Делайте отдельную таблицу для справочника состояний.

Пишите/храните логику обработки данных (иф/елсе) НЕ в базе.
...
Рейтинг: 0 / 0
29.05.2015, 14:19:00
    #38971858
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строковые константы или отдельные таблицы-справочники ?
Cyrax_02 , ты сам задал вопрос о сферическом коне, так что нефиг возмущаться.
На практике у разработчика есть хренова гора требований, органичений и прочего хлама. И выбираемый подход определит именно она, а не абстрактное соображение, что какой-то вариант кошернее.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Строковые константы или отдельные таблицы-справочники ? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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