Вопрос по MySql


ArbNet
1165

В запросе сначала вызывается процедура и запоминается результат в переменной.

Затем выполняется сформированный запрос с выборкой из разных таблиц в зависимости от переменной созданной в процедуре.

Вопрос. При поступлении подобного запроса от другого пользователя переменные будут создаваться для каждого запроса свои или будет использована одна переменная. Накладок не будет? Кто-то делал такие запросы?


lonelywoolf

ArbNet, Естественно, для каждого свои.


ArbNet

Ещё вопрос.

Есть ли в MySql такой механизм отслеживающий ссылается ли что-то на строку данных или нет, и если нет то её можно удалить, иначе нельзя.

Немного поясню. Есть две или более сущностей и какие либо их записи ссылаются на данные одной и той же таблицы.

Допустим возникает момент когда удаляются эти записи сущностей и на данные той таблицы никто уже не ссылается их также можно удалить, как такой механизм можно реализовать?


Х.З.

ArbNet:
Ещё вопрос.

Есть ли в MySql такой механизм отслеживающий ссылается ли что-то на строку данных или нет, и если нет то её можно удалить, иначе нельзя.

Немного поясню. Есть две или более сущностей и какие либо их записи ссылаются на данные одной и той же таблицы.

Допустим возникает момент когда удаляются эти записи сущностей и на данные той таблицы никто уже не ссылается их также можно удалить, как такой механизм можно реализовать?

Можно, изучив https://ru.wikipedia.org/wiki/SQL


ArbNet

habr.com/ru/post/488054

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


Х.З.

ArbNet:
Вот хорошую статью нашёл https://habr.com/ru/post/488054/

Я в свое время книгу Мартина Грабера читал, погуглите, почитайте, может поможет в будущем.


ArbNet

Х.З.:
книгу Мартина Грабера

Спасибо, скачал, почитаю.


Aisamiery

Вопросы то ли от не знания, то ли от того что сильно плаваете в теме.

Первый вопрос — процедура. Зачем вы вызываете процедуры в MySQL? Передайте в запрос сразу нужные вам параметры с клиента.

Второй вопрос совсем абстрактный, как говорится очень интересно, но нифига не понятно. Есть такое понятие как Внешний ключ (Foreign key), погуглите, возможно вы это ищите.


Stek

А еще можно воспользоваться тригерами, но в 99% связка по ключу удобнее.

https://stackoverflow.com/questions/11818191/mysql-trigger-delete-from-table-after-delete


ArbNet

Aisamiery:
Вопросы то ли от не знания, то ли от того что сильно плаваете в теме.

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

Aisamiery:
Первый вопрос — процедура. Зачем вы вызываете процедуры в MySQL? Передайте в запрос сразу нужные вам параметры с клиента.

Я сейчас делаю PHP драйвер для получения данных сущности из MySql.

У меня не простой запрос, как обычно делается, задаётся некоторое условие выборки и поля которые нужно получить.

Идея следующая.

Есть так скажем стандартные таблицы под определённый тип данных. Например: Integer, Text и тд. В этих таблицах по два поля id и value

Теперь я могу в коде PHP прописать структуру сущности в простом массиве


$info= [ "svoystvo1" => "Integer",
"svoystvo2" => "Text",
];

То есть передав в драйвер массив структуры сущности, драйвер будет искать данные в разных таблицах Integer и Text соответственно и возвратит этот же массив сущности но уже с данными.

А чтобы выборка данных была быстрее я создал таблицу записей сущностей в которой поля name(имя сущности) и record(массив id строк значений свойств).

То есть в начале запроса происходит получение данных record потом формируется запрос с выборкой из разных таблиц данных по id

Aisamiery:
Есть такое понятие как Внешний ключ (Foreign key), погуглите, возможно вы это ищите

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

———- Добавлено 23.05.2020 в 10:44 ———-

Stek, Спасибо. Поэкспериментирую с триггерами.

Если кому интересно, вот описание как их применять https://habr.com/ru/post/37693/


Aisamiery

Вы в очередной раз какую то хрень придумываете. Зачем вам разные таблицы, что мешает сложить в одну где будет ID | ENTITY_ID | PROP_ID | INT | TEXT | DATE

Сделать слой абстракции, где манипулировать типами, то есть базовый тип FieldText у вас будет знать что его параметр лежит в колонке TEXT, дальше вам нужен только маппинг данных с простого запроса sql в объект PHP. То есть, одним запросом вы выберете все данные с таблички относящиеся к определенному объекту (ENTITY_ID), а сам объект уже разрулит с какой колонки ему брать данные или в какую записывать.

Не впихивайте в БД все что можно, оно имеет последствия и вполне плачевные, как на скорости, так и на бэкапе этих вещей. Вам нужно изолироваться от специфических вещей хранилища, чтобы иметь возможность сменить его тип.

———- Добавлено 23.05.2020 в 20:53 ———-

Вам ещё стоит почитать про нормальные формы, в частности 5NF

———- Добавлено 23.05.2020 в 20:56 ———-

ArbNet:
Кому то другому не стал бы отвечать, но у вас пытливый ум и обширные знания. Я долгое время не занимался веб разработками поэтому что и не знал забыл, сейчас учусь практически заново, конечно я плаваю в теме. И у меня манера сразу приступать к делу и по ходу уже решать разные задачки как это сделать. Есть идеи, но нет знаний в данном случае конструкций запросов mysql.

У вас в голове каша, а не забывчивость конструкций. Вы впервые проходите этот путь, это видно не вооруженным глазом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *