Т.к. практика работы с БД типа MySQL крайне мала, возник вопрос. Если с добавлением данных в одну таблицу все ясно, то как происходит добавление данных в реляционную БД когда несколько таблиц связаны через внешние ключи. К примеру есть БД с таблица товаров: Main Product Table id_product|title|description|country_name|currency|price но минус в том, что будут постоянные повторения стран и валюты, поэтому правильнее было бы всё это разнести по таблицам, причем, например в такую таблицу, как Country Table и Currency Table должна быть возможность добавлять данные независимо, т.к. эти данные могут использоваться не только в связке с товаром. Product Table id_product|title|description Country Table id_country|country_name Currency Table id_currency|currency Price Table id_price|id_product|id_country|id_currency|price В каждой таблице, то что подчеркнуто, это Primary Key, то что я обозначил цветом, это внешние ключи, которые по сути являются связями между таблицами и создают ее целостность. Это пока все на бумаге, как идея. Ибо я не совсем понимаю, как нужно правильно добавить данные чтоб сохранить все связи. Я не прошу написать код, я хочу разобраться, поэтому вопрос заключается в том, верно ли я мыслю и где можно почитать и изучить данный вопрос по такому типу добавлению данных в БД. В конечном варианте, все эти данные должны заноситься в БД из HTML формы. В которой по логике значения Country Table и Currency Table выпадающий список, т.к. эти данные независимы от добавления товара в основной форме.
Верно. Так и заносятся отдельными запросами. В HTML-форме делаем <select name="currency_id"> с <option value="12">USD<option>. В PHP сначала вставляем товар INSERT INTO products ..., потом получаем product_id запросом с LAST_INSERT_ID и его уже вставляем в INSERT INTO prices.
Т.е. получается некая цепочка запросов в которой каждый последующий запрос берет ID предыдущего, если того требует условие. А вот Price Table id_price|id_product|id_country|id_currency|price тут получается нужно по ходу выполнения кода просто заносить каждый id в отдельную переменную, а потом при составлении запроса на добавление, просто взять значения эти переменных?
Еще такой момент, в таблице: Price Table id_price|id_product|id_country|id_currency|price id_price, id_product, id_country, id_currency - должны быть primary key? Или только id_price ?
Первичный ключ нужен, чтобы различать все существующие в таблице записи. Иногда делают групповой первичный, но только чтобы не вводить «собственный» идентификатор. Если же таковой используется, то ничего к нему добавлять не нужно.
А если у меня 2 независимые таблицы. Таблица товара Product Table id_product|title|description и таблица страны товара для которой это товар должен отображаться, но эта таблица используется и для других целей не связанных с товаром, поэтому связи с Product Table нет Country Table id_country|country_name Но обе эти таблицы между собой не связаны, нужно создавать отдельную таблицу, которая будет содержать эти связи? Т.е. типа посредника?
Если продукт только в одной стране, то связать, добавив id_country в Products. Если в нескольких странах, то сделать связующую.