Связи MySQL или средства PHP

105
18 января 2022, 10:30

Когда лучше использовать между таблицами БД (в моем случае MySQL) встроенные связи ( один к одному, один ко многим и т.д.), а когда лучше реализовывать это с помощью серверных языков программирования (в моем случае это PHP). Дело в том, что мне гораздо удобнее использовать средства php, т.к. это более гибкая структура ( как мне кажется). Вот и хотел услышать еще мнения.

Answer 1

Когда лучше

Вопрос лишён смысла. Указанные вещи решают принципиально разные задачи.

Связи (вернее, внешние ключи) между таблицами БД являются основой для работы подсистемы целостности и непротиворечивости данных на уровне СУБД, которые не позволяют вставить в таблицы БД данные, для которых не выполняется условие соответствия, либо изменить данные таким образом, чтобы нарушить это соответствие.

Связывание на уровне приложения решает задачу установления соответствия записей таблиц при осуществлении манипуляций с данными.

Первые имеют безусловный приоритет и статус догмы. Вторые - так, текущая хотелка на один запрос.

Контроль целостности данных на уровне СУБД с использованием механизма FK ведётся непрерывно и постоянно (реально - в любой момент изменения данных), не позволяя произойти рассогласованию. Если же такое происходит по независящим от СУБД причинам (как правило, причиной являются ошибка системного ПО или физического оборудования хранения/обработки) - ошибка детектируется в кратчайшие сроки (фактически - при первом обращении к повреждённому блоку данных).

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

Контроль на уровне СУБД не позволит выполнить случайное или злонамеренное рассогласование данных, для этого потребуется сначала изменить структуру хранения и отключить или удалить внешние ключи. При правильной настройке прав доступа - малореально.

Контроль на уровне приложения в этом смысле - вообще ни о чём. Его просто нет.

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

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

READ ALSO
Как в smarty сложить значения переменных?

Как в smarty сложить значения переменных?

Есть код вывода итоговой цены в корзине:

91
Как обойти защиту элементов массива Woocommerce?

Как обойти защиту элементов массива Woocommerce?

Делаю интернет-магазин в WP на WoocommerceНадо получить цену товара

181
Как с помощью PHP выбрать два последних input?

Как с помощью PHP выбрать два последних input?

Как с помощью PHP выбрать два последних input? при учете что цифры это id из таблицы БД

98