SQL Primary Key и Foreign Key, объясните принцип

197
10 декабря 2016, 10:10

Есть у меня две таблицы: product_content и product_images. В первой я храню всю текстовую информацию о продукте, в другой я храню адрес для изображений.

Страктура таблиц:

product_content:

id - primary key
url - varchar
title - varchar
content - text
meta_title - text
meta_description - text
meta_keywords - text
deleted - int (0|1)

product_images

id - primary_key
product_id - int
full_size - text
mini_size - text
deleted -int (0|1)

Когда я добавляю продукт, я стоставляю два запроса в БД:

`$query_content = "INSERT INTO product_content 
              (url, title, content, meta_title, meta_description, meta_keywords) 
       VALUES (:url, :title, :content, :meta_title, :meta_descritpion, :meta_keywords)";`

Потом я получаю последний id с запроса $query_content и передаю в следующий запрос на вставку изображений. Запрос исполняется в цикле.

`$query_image = "INSERT INTO product_images
              (product_id, full_size, mini_size) 
       VALUES (:product_id, :full_size, :mini_size)";`

Вопрос: Если я сделаю product_images столбец product_id - foreign key, то как мне это поможет? Надо ли мне будет получать id продукта, который я вставил в таблицу product_content? Я просто совсем не понимаю зачем вообще есть такой индекс как Foreign Key. Могли бы вы объяснить на моём примере. В документацию смотрел, ничего не понял. Спасибо.

Answer 1

Внешний ключ нужен для контроля целостности данных (в MySQL он работает только для движка MyISAM). Нужен он для того, чтобы в таблице product_images не оказалось такого product_id, какого нет в product_content

READ ALSO
Ошибка autoload в 92five app

Ошибка autoload в 92five app

Скачал 92five app , но при запуске на XAMPP возникли следующие ошибки, хотя Composer я устанавливал

185
Modx evo как сделать url регистрозависимым

Modx evo как сделать url регистрозависимым

mysitecom/books/book1/ 1) Как сделать чтобы mysite

202
Как избавиться от слэшей url

Как избавиться от слэшей url

Как избавиться от слэшей в url?

165
file_put_contents записывает кракозябры

file_put_contents записывает кракозябры

Файл с кодировкой utf8, создаю переменую

245