За последние 24 часа нас посетили 22378 программистов и 1145 роботов. Сейчас ищут 625 программистов ...

Добавление данных в БД.

Тема в разделе "PHP для новичков", создана пользователем AlexandrS, 28 дек 2018.

  1. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Т.к. практика работы с БД типа 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 выпадающий список, т.к. эти данные независимы от добавления товара в основной форме.
     
  2. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Верно. Так и заносятся отдельными запросами. В HTML-форме делаем <select name="currency_id"> с <option value="12">USD<option>. В PHP сначала вставляем товар INSERT INTO products ..., потом получаем product_id запросом с LAST_INSERT_ID и его уже вставляем в INSERT INTO prices.
     
    AlexandrS нравится это.
  3. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Т.е. получается некая цепочка запросов в которой каждый последующий запрос берет ID предыдущего, если того требует условие.
    А вот
    Price Table
    id_price|id_product|id_country|id_currency|price
    тут получается нужно по ходу выполнения кода просто заносить каждый id в отдельную переменную, а потом при составлении запроса на добавление, просто взять значения эти переменных?
     
  4. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Да.
     
    AlexandrS нравится это.
  5. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Большое спасибо за пояснение!
     
  6. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Еще такой момент, в таблице:
    Price Table
    id_price|id_product|id_country|id_currency|price
    id_price, id_product, id_country, id_currency - должны быть primary key? Или только id_price ?
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Первичный ключ нужен, чтобы различать все существующие в таблице записи. Иногда делают групповой первичный, но только чтобы не вводить «собственный» идентификатор. Если же таковой используется, то ничего к нему добавлять не нужно.
     
    AlexandrS нравится это.
  8. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    благодарю.
     
  9. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Групповой PK по этим всем полям.
     
    AlexandrS нравится это.
  10. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Речь об этом?
    Код (Text):
    1. PRIMARY KEY (id_price, id_product, id_country, id_currency)
     
  11. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Да
     
    AlexandrS нравится это.
  12. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    А если у меня 2 независимые таблицы. Таблица товара
    Product Table
    id_product|title|description

    и таблица страны товара для которой это товар должен отображаться, но эта таблица используется и для других целей не связанных с товаром, поэтому связи с Product Table нет
    Country Table
    id_country|country_name

    Но обе эти таблицы между собой не связаны, нужно создавать отдельную таблицу, которая будет содержать эти связи?
    Т.е. типа посредника?
     
    #12 AlexandrS, 30 дек 2018
    Последнее редактирование: 30 дек 2018
  13. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Если продукт только в одной стране, то связать, добавив id_country в Products. Если в нескольких странах, то сделать связующую.
     
    AlexandrS нравится это.
  14. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    В нескольких