Многозначные атрибуты являются распространенным сценарием любого ориентированного на базы данных приложения.Одним из распространенных вариантов использования является добавление нового объекта, который попадает в обе таблицы и связан их внешним ключом.
Например, новый сотрудник был добавлен в систему в первый день своей работы, когда он начал работать в определенной команде в компании.Запись этого человека сохраняется в двух таблицах: в одной таблице хранится личная информация (employee
) сотрудника, а в других таблицах (employee_team
) хранится продолжительность сотрудника с каждой командой за все время их пребывания в компании.Система управления сотрудниками имеет одну длинную форму для нового сотрудника (это просто пример для представления варианта использования), которая берет всю эту информацию о сотруднике, включая отдел, с которым этот человек начинает работать.Чтобы сохранить вставку этой информации в две таблицы, очевидно, которые связаны с использованием атрибута внешнего ключа.
Одним из способов реализации такого сценария является использование Begin Transaction
и Commit
и выполнение 2 запросов на вставку между ними.из приложения.Другое решение может создать параметризованную хранимую процедуру и выполнить один вызов этой процедуры из приложения.
С точки зрения базы данных оба решения, вероятно, приводят к одним и тем же действиям на сервере базы данных.Однако справедливо ли сказать, что, с точки зрения приложения, для первого решения может потребоваться больше времени для связи в два раза, чем для более позднего решения?Каковы плюсы и минусы каждой процедуры?Каковы преимущества использования одного над другим, как с точки зрения базы данных, так и с точки зрения приложения?
Моя нынешняя система основана на PHP
и MySql
, но я предполагаю, что этот сценарийобщий для всех типов РСУБД.