Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Быстродействие логические операций в запросах  [new]
chatlanin
Member

Откуда:
Сообщений: 1
Начал делать свой первый проект на MSSQL Express, и столкнулся с делемой.

Программа клиент работает с таблицой сотрудников, нужно записать какие виды операций они могут выполнять. Так как операций немного (меньше 50), решил использовать флаги. Создал поле bigint, где каждый бит будет означать определённую операцию. В отдельной таблице хранится все виды операций.

| OperationID | OperationName |

| 0001b | Driving |
| 0010b | Phone Operator |
| 0100b | Quality Control |
| 1000b | Stock Checking |

Затем что бы допустим найти всех работников умеющих Driving и StockChecking достаточно сделать запрос
SELECT name FROM Employees WHERE emp_operations && 1001b = 1001b


Таблицу Operations предполагаю сразу загружать в память клиента целиком что бы каждый раз не обращаться к базе.
Второй вариант сделать третью таблицу EmpleyeesOperations по принципу

EmployeeID int | OperationID int |
10(Jack) | 3(Driving) |
3(Mike) | 3(Driving) |
10(Jack) | 5(QualityControl) |

Так какой вариант в итоге будет более быстро-действующий, как быстро выполняются логические операции в запросах?
2 мар 15, 01:16    [17329733]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие логические операций в запросах  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Более быстродействующий будет без битовых масок.
2 мар 15, 01:19    [17329739]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие логические операций в запросах  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33991
Блог
chatlanin,

для начала ознакомьтесь с первой нормальной формой, а конкретнее - с понятием атомарности
2 мар 15, 07:35    [17329881]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие логические операций в запросах  [new]
Jaffar
Member

Откуда:
Сообщений: 633
chatlanin,

Более дебильного решения я и представить себе не могу.
Какие-то битовые маски.
Вы уж тогда сразу на асме пишите ВСЕ и СУБД вам не нужна, сохраните все в .com файл сразу и загружайте в регистры.

MOV ax, [bx] -- будь мужиком, пиши на ASM`е, БЛ...ДЬ
==========================================================

А вообще сделайте 3 таблички: сотрудники, операции и связь между ними.
А чтобы не обращаться 10 раз сделайте view.
или можно написать процедуру, которая вернет сразу несколько результирующих наборов.

Я не думаю что сотрудников у вас миллиарды и все только тем и занимаются что меняют набор их операций.

Главное нормально продумать логику взаимодействия клиента и сервера - т.к. основные тормоза бывают именно из-за того что разработчик не понимает того с чем он работает и как, а не из-за лишний таблички.
2 мар 15, 12:50    [17331170]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие логические операций в запросах  [new]
хранится все виды
Guest
chatlanin,

автор
немного (меньше 50)

да не, для битовой маски уже как-то дохрена.
2 мар 15, 13:42    [17331465]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие логические операций в запросах  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Многие-ко-многим выполняют через три таблицы.
2 мар 15, 14:11    [17331637]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие логические операций в запросах  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Jaffar
Более дебильного решения я и представить себе не могу.
Какие-то битовые маски.

то ,что ві никогда ето не использовали воовсе не повод чтоб рассказівать какой ето писец :)
При правильном подходе - отличній интрумент для н-го количества реализации на мсскл
2 мар 15, 14:29    [17331746]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить