За последние 24 часа нас посетил 17771 программист и 1622 робота. Сейчас ищут 1760 программистов ...

Организация базы данных

Тема в разделе "PHP и базы данных", создана пользователем Izooomrud, 26 янв 2018.

  1. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Привет, подскажите пожалуйста как лучше всего сделать.
    Есть данные
    Страна:Россия, Товар:яблоки, цена:55
    Страна:Россия, Товар:сковородки, цена:171
    Страна:Китай, Товар:яблоки, цена:38
    Страна:Россия, Товар:сковородки, цена:192

    Задача - записать их в БД и затем выбирать товар по максимальной или минимальной цене.

    Вопрос - как проще организовать все это дело, создавать 2 таблицы Россия, Китай со столбцами товар и цена, или пихать все в одну таблицу со столицами товар, цена, товар2, цена2 с условием, что затем будет выборка товара с минимальной, или максимальной ценой
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    А про нормализацию данных почитать?
    Таблица стран, таблица товаров, таблица цен (товар-цена).
    Выборка с применением JOIN.
    Максимумы, минимумы, средние и так далее - агрегатами.

    Пожалуйста.
     
    denis01 нравится это.
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    если выбирать только по цене, то тут и одной таблицы хватит.
    но завтра у тебя появятся разные цены на один и тот же товар по разным причинам, или ты захочешь выбирать все товары какой-то страны, или товары, являющиеся посудой (нужно еще разделить на категории товаров. Этого нет в описанном.)
    И думать об этом надо уже сегодня. Либо сразу делать по уму, либо заложить возможность лёгкого и быстрого добавления таблиц.

    Предложенный тобой вариант:
    полный бред, если что...
     
  4. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    так цены уже сейчас разные
    я хочу сделать вывод из БД всех товаров разница в цене которых с минимальной ценой от 5%, что бы выглядело это так
    HTML:
    1. <tr><td>Товар</td><td>Китай</td><td>Россия</td><td>Польша</td></tr>
    2. <tr><td>Яблоки</td><td>72</td><td>76</td><td>77</td></tr>
    Так вот и хочу сразу начать делать правильно, что бы потом не переделывать, просто не знаю как и с чего начать
     
    #4 Izooomrud, 26 янв 2018
    Последнее редактирование: 26 янв 2018
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    почитай про внешние ключи и связи один ко многим. Тебе этого хватит на первое время.
     
    denis01 нравится это.
  6. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    А каким образом происходит запись в такую таблицу потом, что-то никак не могу найти ничего, покажите пример пожалуйста. Ну понятно связанные пола автоматически заполнятся, а с остальными что?
     
  7. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Там будет несколько таблиц. Одна с самим товаром и остальные с параметрами этого товара.
    Например, все категории товаров перечисленны в отдельной таблице. А в баблице с товаром id категории, к которой товар принадлежит. Сами категории могут иметь внешний ключ к себе же. Т е поле внешнего ключа связывается с первичным ключом этой же таблицы. Это нужно для формирования дерева категорий, но первое время с этим можно не заморачиваться.
    Если хочешь несколько цен для одного товара, то это еще одна таблица...
    Короче изучай)
    С моих слов всё равно нихрена не поймёшь.
    Нужно уловить саму суть механизма формирования структуры БД.
    Но это если по уму делать.
    А так, можно нахерачить всё в одну таблицу, наговнокодить и забыть о масштабировании проекта)))
     
  8. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Нет вопрос не в этом, я создал несколько отдельных таблиц
    goods(id,type,desctription), country(idCountry, country) и prices(idPrices, price)
    создал связь в phpmyadmin id, idCountry и idPrices, но как теперь написать запрос на добавление во всё это дело? Можете показать пример?
    Поле type уникально и запрос раньше выглядел вот так, когда в базе была 1 страна
    Код (Text):
    1.  
    2. INSERT INTO $bd (type, country, price)
    3.     VALUES ('$v1', '$v2', '$v3')
    4.     on duplicate key update bid = values(country), ask = values(price)
    Получается, что вставка в разные таблицы теперь и для каждой надо отдельный запрос?
     
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    сначала заполняешь таблицы без внешних ключей, а потом с внешними ключами
    т е в твоём случае - страны,товары, цены
     
  10. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    ну а как быть с уникальностью? мне не нужно добавлять новые строки если такой товар уже есть в базе, а нужно просто обновить цены на него и всё
    теперь в 1 выражение уже ничего не сделать при таком подходе?
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    не понимаю...
    нужно обновить цены - обновляешь цены.
    ты это для обучения делаешь или реально магазин себе пилишь и не знаешь, что есть готовые?
     
  12. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    нет это я пример выдумал, для обучения сделал, потом расширил пример до нескольких стран с товарами и не понял как быть в этом случае
    Ну так я же добавлял товары если таких ещё нет в таблице (поле type ведь оно уникальное) и по ключу on duplicate key оно проверялось, если совпадение было, то обновлялись цены, а теперь цены в другой таблице, как тут быть?
     
  13. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    у тебя в другой таблице должен быть внешний ключ с привязкой к товару, которого цена)
     
  14. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    но так для каждой таблице же нужно писать отдельный запрос на добавление данных, а как потом обновлять в 2х других если в них нет поле type по которому проходит проверка уникальности?!
    Да блин вы можете просто показать похожий пример?
     
  15. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
  16. Izooomrud

    Izooomrud Новичок

    С нами с:
    15 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    лол