Правильно структурировать

Discussion in 'PHP' started by |qbz|, 16 Apr 2011.

  1. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Вобщем делаю что-то типа шопа. Там есть товары. У каждого товара есть какие-то свойства. Свойства мне изначально не известны, их количество, название и тип данных соответственно. Вопрос - как правильно сделать таблицу баз данных (мускул) для этих самых свойств? Я думал делать вот так:

    1) создадим таблицу "свойства", в которой будет ид, название_свойства

    пример:

    1 | цвет
    2 | обьем
    3 | год выпуска

    2) создадим таблицу "таблица_свойств", в которой будет ид, ид_товара, ид_из_таблицы_свойства, значение

    пример:

    1 | 32 | 2 | 16 метров
    2 | 32 | 3 | 1992
    3 | 34 | 1 | красный

    правильно ли это с точки зрения производительности?
     
    #1 |qbz|, 16 Apr 2011
    Last edited: 16 Apr 2011
  2. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    А может просто в таблице свойств первой сразу иметь поле для ИД товара и его характеристики. например :

    ИД| Название----|Id товара | характеристика
    1 -| цвет-----------|3------------| Красный
    2 -| обьем---------|2-------------| 3 литра
    3 -| год выпуска--|3-------------| 2009

    С одной стороны удобно выбирать, 1 запрос и получил массив свойств, а тебе нужно делать 2 запроса (или один но с вложенными).

    С другой стороны нужно будет для каждого товара за ного прописывать название свойства. Хотя в твоем случае потом создастся такой список свойств, что ориентироваться в них будет сложновато, и быстрее будет напечатать.

    Ну и в моем случае БД будет меньше на 1 таблицу.

    А в админке можно тоже выбирать из этой таблицы список названий свойств и выводить их в порядке популярности для удобства.
     
  3. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    а сейчас подумай. что лучше - присвоить свойству "техническое состояние за 2004 год" циферку "1" и везде (в 100 товарах например писать 1,1,1... либо писать 100 раз "техническое состояние за 2004 год"?
     
  4. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Одинакого. Это все автоматизируется.
    Выводишь список товаров, выбираешь 100 нужных и всем присваиваешь значение.

    А теперь подумай как часто тебе придется это делать? 1раз в день?
    А твои Х запросов лишних будут вызываться раз 100-1000 в час.

    П.с да и ctrl+c ctrl+v никто не отменял, 1 раз написал и копируешь везде.

    Ну и еще один п.с.с. ты писал про производительность,а не удобство использования.
    Вот сам смотри :

    Так вот ИМХО не правильно.
     
  5. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Я просто это сказал к тому, что размер базы ЗНАЧИТЕЛЬНО увеличится => увеличится нагрузка на рамку мускул-сервера => все будет шикарненько лагать.
     
  6. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Фигня. Я вот поддерживаю сайт с объявлениями, у меня свыше 12000 объявлений с текстом и не лагает ведь, выборка происходит быстро.

    1 длинный запрос всегда быстрее 2х.

    Это я к тому,что база лагать не будет если что и будет занимать время так это доставка информации от базы к клиенту. НО один фиг будет доставлен тот-же объем информации только для это сделано в 2 раза больше запросов.
    Тоесть ты сначала заставляешь базу пройтись по всем товарам и выбрать нужный, а потом еще пройтись по списку свойств и выбрать те котоые принадлежат товару,а потом еще и выбрать значения этих свойств.

    И это будет работать быстрее чем просто выбрать из базы свойств?


    Я в общем понял что ты хотел сказать, ты просто в конце поставил знак вопроса,а надо было восклицательный..т.к ты уже создал себе мнение и хочешь чтоб его просто поддержали,а не сказали как лучше. Дам тебе что ты просишь: Да ты гениален,все будет работать как часы и твой магазин не загнется.