SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.08.2021 20:37:30

koller18
Участник
Зарегистрирован: 15.08.2021
Сообщений: 2

Помогите раскидать задачу

Здравствуйте! Предупреждаю, что крайне слабо разбираюсь в sql. Делаю модуль с таблицами (в основном прайс-листы) на PHP, mySQL и JS. Могу изменять структуру таблиц и всего как угодно, но не могу понять как правильно.

Есть TABLES, которая хранит номера строк через запятую. Есть таблица со строками TABLES_STRINGS, которая хранит ID строк и номера блоков, из которых она состоит. Одна строка может быть в разных таблицах. В таблице TABLES_BLOCKS блоки хранят свои ID, NAME и какие-то свойства, но без содержимого. У каждого блока может быть неограниченное количество вариаций содержимого - они хранятся в таблице TABLES_BLOCKS_VAR со своими ID и т.п. Есть таблица TABLES_STRINGS_BLOCKS_VAR, которая хранит информацию о том, в какой таблице какая вариация блока в строке (TABLE_ID, STRING_ID, BLOCK_ID, VAR_ID).

Всё это сделано для сколь угодно таблиц(прайсов) с разным составом строк, но где-то может отличаться тайтл или цена или другой блок. Зато, если поменять цену в одном блоке, то цена поменяется во всех таблицах, где она есть. Какая-то синхронизация. Для sql я пользуюсь библиотекой ORM RedbeanPHP, в ней можно и простые запросы делать.

Вопросы:

1) Если писать вложенные запросы или JOIN-ами делать, будет ли какой-то профит в скорости? Стоит ли оно того?
2) Проще не париться и сделать несколькими запросами? можно упростить и хранить JSON в самой первой таблице с строками, блоками и их вариантами. Далее разобрать всё в PHP, но это уже будет не один запрос к базе, а как минимум 2-3. Стоит ли?
3) Многие ко многим, один ко многим - это моя тема, как то может помочь? Никак не могу понять(

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

P.S. Есть таблица excel с демо-версией таблиц и запросом с JOIN-ами в прикреплённом и по ссылке на Я.диске: https://disk.yandex.ru/i/oR98-Pt62ZZeIw

Неактивен

 

#2 16.08.2021 10:56:48

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2421

Re: Помогите раскидать задачу

Хранить через запятую - это очень порочная практика, крайне не рекомендуется. Хранить в json тоже нужно "с умом", то есть лишь тогда, когда это действительно нужно.

1) чаще join лучше чем вложенный запрос.
2) лучше несколько простых быстрых запросов, чем один сложный.
3) да, многие ко многим и один ко многим - похоже на то, что лучше использовать

>Не хотелось бы месяцы тратить на изучение.
Ну тогда нужно найти того, что потратит эти месяцы или уже потратил... что ж тут еще посоветовать ;-).


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 16.08.2021 14:05:20

koller18
Участник
Зарегистрирован: 15.08.2021
Сообщений: 2

Re: Помогите раскидать задачу

deadka написал:

Хранить через запятую - это очень порочная практика, крайне не рекомендуется. Хранить в json тоже нужно "с умом", то есть лишь тогда, когда это действительно нужно.

1) чаще join лучше чем вложенный запрос.
2) лучше несколько простых быстрых запросов, чем один сложный.
3) да, многие ко многим и один ко многим - похоже на то, что лучше использовать

>Не хотелось бы месяцы тратить на изучение.
Ну тогда нужно найти того, что потратит эти месяцы или уже потратил... что ж тут еще посоветовать ;-).

Благослови вас господь! Кто-то адекватный ответ написал в SQL-сообществе) А можно еще вопросик?) А если использовать JSON для хранения списка строк, блоков. Новые версии mySQL из коробки умеют JSON. Или это фуфло?

Неактивен

 

#4 16.08.2021 14:40:28

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2421

Re: Помогите раскидать задачу

Умеют, начиная с 5.7
https://sqlinfo.ru/articles/info/20.html

Но, повторяю - не стоит это использовать без чОткого понимания, зачем это нужно


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson