|
|
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
Хотелось бы понять, существует ли в БД понятие enum? Например у меня есть таблица ролей: IdRoleName1Админ2Гость3Менеджер Теперь я хочу написать функцию или хранимую процедуру, которая бы проверяла принадлежность пользователя к той или иной группе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Что мне очень не нравится в этом примере, так это сравнение @Role = 3. В языках высокого уровня можно было бы создать перечисление, например: Код: plaintext 1. 2. 3. 4. 5. Можно ли реализовать такое на уровне БД, чтобы избегать сравнения с magic numbers? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 09:31 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
=MOHAX=Можно ли реализовать такое на уровне БД, чтобы избегать сравнения с magic numbers? А какая принципиальная разница в Вашем случае, править в случае чего Magic Numbers внутри enum или внутри function, если оно будет только в одном месте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 10:09 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
=MOHAX=, В общем случае - нет, не существует. БД занимается хранением данных, а перечисление - это "представление" значений теми же "magic number", но скрытое внутри компилятора\интерпретатора ЯВУ. Представлением данных занимается клиент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 10:16 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
Если хочется сильно, то создайте парсер, который перед отправой на сервер текста процедуры (да и вообще запроса) будет преобразовывать в понятный серверу код С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 10:26 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовА какая принципиальная разница в Вашем случае, править в случае чего Magic Numbers внутри enum или внутри function, если оно будет только в одном месте? В данном примере разницы почти никакой. Просто мне оставили в наследство кучу хранимых процедур, в которых везде встречаются записи вида: Код: plaintext 1. 2. 3. 4. 5. 6. Такой код очень сложно прочитать. Переделывать его я не буду, но хотелось бы разобраться как грамотные люди делают. В принципе можно сделать кучу функций: Код: plaintext 1. 2. 3. 4. И потом сравнивать вот так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 10:27 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
Вместо IF @Role = 3 достаточно написать if exists(select 1 from roles where Id=@Role and RoleName='Менеджер'). Ну или еще добавить поле RoleCode ит туда забубенить roleAdmin, roleGuest и roleManager соответственно, и проверять это поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 10:27 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
NafЕсли хочется сильно, то создайте парсер, который перед отправой на сервер текста процедуры (да и вообще запроса) будет преобразовывать в понятный серверу код Я имел ввиду только код функций и хранимых процедур в БД. Просто хотелось бы сделать его более понятным и прозрачным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 10:41 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовВместо IF @Role = 3 достаточно написать if exists(select 1 from roles where Id=@Role and RoleName='Менеджер'). Ну или еще добавить поле RoleCode ит туда забубенить roleAdmin, roleGuest и roleManager соответственно, и проверять это поле. Это просто пример, для наглядности :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 10:43 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
=MOHAX= В данном примере разницы почти никакой. Просто мне оставили в наследство кучу хранимых процедур, в которых везде встречаются записи вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. IMHO, в данном случае комментарии рулят. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 11:29 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
=MOHAX= В данном примере разницы почти никакой. Просто мне оставили в наследство кучу хранимых процедур, в которых везде встречаются записи вида: Код: plaintext 1. 2. 3. 4. 5. 6. Такой код очень сложно прочитать. Дело в том, что в БД такие вещи делаются не кодом, а таблицами, их отношениями, вычисляемыми полями и прочим. По этому примеру не виден источник данных для переменной @aStageId, на вскидку подошла бы таблица соответствий значений aStageID и Mode и join к ней, возврашаюший сразу нужное значение в @Mode. В случае с ролями - если их не много, можно добавить колонки непосредственно к таблице Person (IsAdmin bit, IsGuest bit, IsManager bit) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 11:36 |
|
||
|
Именованные константы
|
|||
|---|---|---|---|
|
#18+
=MOHAX=Хотелось бы понять, существует ли в БД понятие enum? Например у меня есть таблица ролей: IdRoleName1Админ2Гость3Менеджер Теперь я хочу написать функцию или хранимую процедуру, которая бы проверяла принадлежность пользователя к той или иной группе: Для таких справочников я использую Id текстового типа (например, varchar в SQL Server): IdRoleNameADMINАдминGUESTГостьMANAGERМенеджер Соответственно, запросы становятся более читабельными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2009, 12:34 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36056862&tid=1543181]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 321ms |

| 0 / 0 |
