|
|
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
Как подобные вопросы принято решать на уровне БД ? К примеру, некоторая характеристика сущность может принимать несколько качественных значений (состояний). Возможны следующие варианты реализации: 1) Каждое возможное значение представлено числом, которое непосредственно заносится в поле (самый хреновый вариант) 2) Каждое возможное значение представлено понятной строковой константой, которая непосредственно заносятся в таблицу 3) Все возможные значения хранятся в отдельной таблице-справочнике, а в целевую таблицу заносится идентификатор возможного значения Понятно, что выбор стоит между вариантами 2 и 3 и что применение того или иного варианта в определённой степени зависит от некоторых факторов (и эта зависимость неоднозначна). В варианте 2 можно избежать необходимость создания перечисления в клиентском приложении, в варианте 3 - нет. Кто как решает сабж и какими факторами руководствуется ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 10:46:31 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
Обычно выбор определяется количеством вариантов значения. Если их максимум десяток - разумнее использовать ENUM, иначе всё-таки таблицу-словарь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 10:49:23 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
авторОбычно выбор определяется количеством вариантов значения. Если их максимум десяток - разумнее использовать ENUM, иначе всё-таки таблицу-словарь. Самый железный фактор ( Фактор 1 ), от которого необходимо отталкиваться - могут ли пользователи добавлять новые состояния. Если могут, то однозначно таблица-справочник. Если нет - коптим дальше: Фактор 2 = количество возможных значений (состояний). Предположим, вариантов 15. Реализуем вариант 3 (таблица-справочник). В этом случае в клиентском приложении придётся создавать перечисление, ключи (индексы) которых должны совпадать с ключами записей в таблице-справочнике. Попахивает дублированием данных (в масштабе всей программной системы) - придётся всё время следить за соответствием при добавлении (или удалении + добавлении) новых состояний в процессе разработки. А если данные импортируются и частично обрабатываются в другую программную систему - то уже в 3 местах нужно обеспечивать соответствие. Некошерно получается. Конечно, это всё касается ситуаций, когда состояния влияют на ход выполнения программы (т.е. когда программа должна знать, что это - именно такое состояние, а это - такое). Но в сабже именно о таких состояниях идёт речь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 11:02:08 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02Самый железный фактор ( Фактор 1 ), от которого необходимо отталкиваться - могут ли пользователи добавлять новые состояния. Если могут, то однозначно таблица-справочник.В этом случае первые два варианта просто неприменимы, и выбирать собсно не из чего. Cyrax_02в клиентском приложении придётся создавать перечисление, ключи (индексы) которых должны совпадать с ключами записей в таблице-справочнике. Попахивает дублированием данных Я, признаться, не могу въехать, о чём речь ведётся. Такое впечатление, что Вы говорите о том, чтобы хардкодить набор вариантов состояний на клиентской стороне. Ибо нет никакой проблемы на старте приложения запросить содержимое словаря и соотв. образом сформировать источник данных необходимого контрола или получить идентификатор варианта по его мнемонике. При обмене же со сторонними программными комплексами обмен предпочтительно вести именно в мнемонике, особенно если не выполняется онлайновая синхронизация словарей между комплексами. К тому же такой вариант позволяет сформировать вменяемо-читаемую таблицу соответствий (и при необходимости использовать прослойку-конвертор), а в условиях запрета ввода несуществующих в словаре значений опасность опечатки практически нулевая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 11:15:13 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
авторнет никакой проблемы на старте приложения запросить содержимое словаря Если возможные значения будут представлены строковыми константами или типом ENUM, то как будет выглядеть запрос возможных значений ? авторПри обмене же со сторонними программными комплексами обмен предпочтительно вести именно в мнемонике В этом случае и в текущем клиентском приложении, и в стороннем приложениях целесообразно будет отказаться от идентификаторов в пользу строковых мнемоник. Т.е. работать только со строковыми мнемониками. К примеру, некоторая сущность в некотором поле может иметь 5 значений. Для двух из них имеет место свой (индивидуальный) алгоритм обработки, для остальных - общий алгоритм обработки: Код: php 1. 2. 3. В этом где и в каком виде целесообразно хранить возможные значения ? И что из себя будут представлять значение1 , значение2 , ... - строковую мнемонику или значение перечисления ? Учитывая, что данные о сущностях (включая эти самые значения) будут передаваться в другую программную систему, которая также должна уметь различать эти значения. Ваша реализация ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 11:41:17 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02авторнет никакой проблемы на старте приложения запросить содержимое словаря Если возможные значения будут представлены строковыми константами или типом ENUM, то как будет выглядеть запрос возможных значений ? Код: sql 1. Cyrax_02К примеру, некоторая сущность в некотором поле может иметь 5 значений. Для двух из них имеет место свой (индивидуальный) алгоритм обработки, для остальных - общий алгоритм обработки: Код: php 1. 2. 3. Наверное, всё-таки какой-нить там CASE или SWITCH... в пыхах не силён. Cyrax_02В этом где и в каком виде целесообразно хранить возможные значения ? И что из себя будут представлять значение1 , значение2 , ... - строковую мнемонику или значение перечисления ? Учитывая, что данные о сущностях (включая эти самые значения) будут передаваться в другую программную систему, которая также должна уметь различать эти значения. Подобные ветвления должны организовываться на стороне принимающей данные системы, и там должна быть таблица выбора метода обработки - соответствия между значением поля и неким внутренним для системы индексом (т.е. в коде выше значениеХ - это ни разу не то, что передано из внешней системы, а соответствие переданного значения внутреннему коду метода обработки) используемого для этого значения метода. А как выполняется идентификация значения в этой таблице - по мнемонике или по её индексу - в общем, неважно, проверка-то на равенство. С учётом того, что вероятность изменения мнемоники выше, наверное, предпочтителен внутренний согласованный индекс (из таблицы соответствия подсистемы импорта данных). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 12:20:22 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
Akina , любите теоретические рассуждения ? Кто как делает на практике ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 13:59:03 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
да хоть так хоть эдак сойдет но лучше справочники использовать даже если только три возможных значения, потому что потом вдруг всплывает что нужно еще пункт добавить, да и на клиенте в виде списка отображать проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 14:12:58 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02 Akina , любите теоретические рассуждения ? Кто как делает на практике ? ...на практике люди имеют дело с конкретными задачами, а не с "...некоторая характеристика сущность может принимать несколько качественных значений .." Точный ответ вполне симметричный: в некоторых случаях так-то, в других -- сяк-то. ...а так, советов то много настригать можно... Делайте отдельную таблицу для справочника состояний. Пишите/храните логику обработки данных (иф/елсе) НЕ в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 14:18:27 |
|
||
|
Строковые константы или отдельные таблицы-справочники ?
|
|||
|---|---|---|---|
|
#18+
Cyrax_02 , ты сам задал вопрос о сферическом коне, так что нефиг возмущаться. На практике у разработчика есть хренова гора требований, органичений и прочего хлама. И выбираемый подход определит именно она, а не абстрактное соображение, что какой-то вариант кошернее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2015, 14:19:00 |
|
||
|
|

start [/forum/moderation_log.php?user_name=hcesimmaxi]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 665ms |
| total: | 789ms |

| 0 / 0 |
