Допустим, у меня есть три таблицы:
категории
| column | data_type |
|--------|-------------|
| id | int(10) |
| code | int(5) |
| name | varchar(50) |
депозиты
| column | data_type |
|--------|-------------|
| id | int(10) |
| code | int(5) |
| name | varchar(50) |
товар
| column | data_type |
|---------------|-------------|
| id | int(10) |
| category_id | int(10) |
| deposit_id | int(10) |
| category_code | int(5) |
| deposit_code | int(5) |
| name | varchar(50) |
Столбцы {parent}_id
являются ограничениями внешнего ключа. {parent}_code
- это обычные столбцы, которые должны совпадать в записях родительской таблицы.
Итак, по некоторым причинам я должен вставить тот же code
(относительно родителя id
) в таблицу items
. На самом деле я выполняю кучу операторов select
во время выполнения (приложение PHP) перед выполнением оператора insert
. Что-то вроде:
// Begin transaction...
$categoryCode = Category::selectCode($categoryId);
$depositCode = Deposit::selectCode($depositId);
try {
$item = Item::insert([
'category_id' => $categoryId,
'deposit_id' => $depositId,
'category_code' => $categoryCode,
'deposit_code' => $depositCode,
'name' => $name,
]);
} catch (Exception $e) {
// Rolling back...
}
// Commiting...
Это замедляет процесс и не обеспечивает целостности, основанные на столбцах code
.
Я новичок в SQL, но я думаю, что лучшим подходом было бы заполнение этих столбцов автоматически прямо в операторе insert
. Как продублировать столбцы {parent}_code
на items
детской таблице?