Size: a a a

2020 December 05

DS

David Shiko in SPb Python
Не понимаю, как это помогает?
источник

DS

David Shiko in SPb Python
Пардон, плохой пример привел, пол может быть только М/Ж, а у меня 3 варианта, лучше подойдет пример с ремонтом:
1: мастер умеет чинить стулья,
2: мастер умеет столы,
3: мастер умеет чинить столы + стулья
Задача: выбрать людей, которые умеют чинить столы.
И кажется я знаю как это решить... Просто у меня в базе почему то затесалось значение any для выбора пола человека, вот я и подзавис)
источник

DS

Denis S in SPb Python
David Shiko
Не понимаю, как это помогает?
Вы наверное английский не знаете? В enumeration можно организовать как раз перечислимые типы. Типа М/Ж/Не установлено/Не определился
источник

DS

Denis S in SPb Python
Для пользователя будут символьные значения, БД внутренне будет подставлять числовые значения.
источник

DS

Denis S in SPb Python
Переведите статью через google translate.
источник

DS

David Shiko in SPb Python
Denis S
Для пользователя будут символьные значения, БД внутренне будет подставлять числовые значения.
Проблема то вне в этом. Какая разница какие мнемоники используются.
Мне нужно, что бы когда человек указывал "хочу ремонт стола ИЛИ стула" - ему выдавались все мастера, а если только ремонт стола - то 2/3 типов мастеров соответственно.
Желательно это сделать 1м запросом, т.е. не менять sql запрос в зависимости от выбора
источник

DS

David Shiko in SPb Python
Denis S
Для пользователя будут символьные значения, БД внутренне будет подставлять числовые значения.
Я не вижу как enum в этом помогает
источник

RM

Roman Mindlin in SPb Python
а много таких способностей? столы, стулья, что еще? если их в пределах нескольких десятков, то можно использовать битовые флаги и поиск по битовой маске. если больше, то нужно группировку через промежуточную таблицу вводить
источник

DS

David Shiko in SPb Python
Roman Mindlin
а много таких способностей? столы, стулья, что еще? если их в пределах нескольких десятков, то можно использовать битовые флаги и поиск по битовой маске. если больше, то нужно группировку через промежуточную таблицу вводить
Точно не больше 10
источник

DS

David Shiko in SPb Python
Roman Mindlin
а много таких способностей? столы, стулья, что еще? если их в пределах нескольких десятков, то можно использовать битовые флаги и поиск по битовой маске. если больше, то нужно группировку через промежуточную таблицу вводить
Можете подробнее про битовые флаги в области БД?
Что такое битовый флаг я конечно же знаю
источник

SK

Sergio Keler in SPb Python
David Shiko
Всем привет. Подскажите пожалуйста как организовать таблицу.
Человек выбирает допустимый пол таксиста (М, Ж или Любой пол (Ж+М)).
Я могу сделать отдельную таблицу для пола, а могу поместить в основную (там будут значения 1, 2 и 3 соответственно), как лучше?
create type sex_t enum(‘мужской’, ....);
create table blah(
sex sex_t not null,
...
источник

DS

Denis S in SPb Python
Тогда скорее промежуточная таблица. Битовые маски наверное не индексируются?
источник

MA

Maxim Afanasev in SPb Python
David Shiko
Я не вижу как enum в этом помогает
Он и не должен, это просто тип данных. Логика выборки должна быть в запросе.
источник

SK

Sergio Keler in SPb Python
David Shiko
Пардон, плохой пример привел, пол может быть только М/Ж, а у меня 3 варианта, лучше подойдет пример с ремонтом:
1: мастер умеет чинить стулья,
2: мастер умеет столы,
3: мастер умеет чинить столы + стулья
Задача: выбрать людей, которые умеют чинить столы.
И кажется я знаю как это решить... Просто у меня в базе почему то затесалось значение any для выбора пола человека, вот я и подзавис)
select ... where sex=‘male’ or sex=‘female’;
Это работает с дикой скоростью тк нет сравнения строк про типе sex_t.
Даже если сравнивать строки, если есть индекс по этому полю, то строка не используется. А происходят битовые операции.

Вообще, при грамотном описании схемы, в реляционной бд любой селект приводит к битовым операциям. Ну, не надо пользоваться like ;)
источник

DS

David Shiko in SPb Python
Sergio Keler
select ... where sex=‘male’ or sex=‘female’;
Это работает с дикой скоростью тк нет сравнения строк про типе sex_t.
Даже если сравнивать строки, если есть индекс по этому полю, то строка не используется. А происходят битовые операции.

Вообще, при грамотном описании схемы, в реляционной бд любой селект приводит к битовым операциям. Ну, не надо пользоваться like ;)
Скорость не важна, вопрос, как сделать это единым запросом, или другое решение - сделать отдельную таблицу, но тогда снова вопрос, юзеров в столблик или в строчку прописывать, т.е.
table skills:
user_1 = стул стол электрика ...
user_2 = стул стол электрика ...
или же
table skills:
user_1 стул
user_1 стол
...
?
источник

SK

Sergio Keler in SPb Python
David Shiko
Скорость не важна, вопрос, как сделать это единым запросом, или другое решение - сделать отдельную таблицу, но тогда снова вопрос, юзеров в столблик или в строчку прописывать, т.е.
table skills:
user_1 = стул стол электрика ...
user_2 = стул стол электрика ...
или же
table skills:
user_1 стул
user_1 стол
...
?
select * ... where sex in (список);
источник

RM

Roman Mindlin in SPb Python
Denis S
Тогда скорее промежуточная таблица. Битовые маски наверное не индексируются?
Да сделайте проще. столбец skills, в нем например стулья=1, столы=2, шкафы=4. Тогда столы и стулья это будет 3, стулья и шкафы будет 5, все вместе будет 7. И так же поиск по целочисленному индексу
источник

SK

Sergio Keler in SPb Python
select (select sex ... where id=текущий) as sexlist, * блыбла

Используй типа join функцию, она есть в постгресе и хз как в мускле.
источник

SK

Sergio Keler in SPb Python
Это будет в одну строчку
источник

SK

Sergio Keler in SPb Python
Я не понял, если у персоны мб не колько вариантов атрибута - отдельная таблица. Если один, то поле.
источник