Forum Webscript.Ru
Общие => Базы данных => Тема начата: secam от 08 Сентября 2004, 12:25:25
-
Господа разработчики и проектировщики,
пишу интернет магаизн компьютерного железа,
из готовых решений ничего достойного найти не удалось, изобретаю свой "велосипед" :)
Perl + MySQL 4.1
А вопрос вот в чем:
Известно, что компьютерное железо бывает очень разным, HDD и Монитор например.
И то и другое, с точки зрения магазина - это товар.
Но монитор может иметь такие параметры, как размер экрана, рабочие разрешения, частоты развертки и т.д.
А HDD совсем другие параметры: Емкость, скорость вращения диска и т.д.
Подскажите, как спроектировать таблицы, так,чтобы возможно было осуществлять поиск по этим параметрам оборудования, например найти монитор с частотой развертки более 100Гц и т.д.
И второе условие - возможность добавить новый тип оборудования, не переделывая всю базу.
Из моих идей, есть только вариант определить список типов оборудования и для каждого типа создать свою таблицу с набором параметров. А в таблице товаров давать тип из списка и ID из соответствующей таблицы с параметрами.
Но может есть способ удобнее ?
-
Не очень понял твой вариант. Но могу предложить нижеследующее (нечто подобное я реализовывал совсем недавно в похожей ситуации).
1) Заводишь таблицу "Тип оборудования":
ID типа оборудования (primary key)
Название типа оборудования.
2) Заводишь таблицу "Товары":
ID товара (primary key)
ID типа оборудования
Название товара
Ещё какие-либо общие для всех товаров параметры
3) Таблица "Параметры":
ID параметра (primary key)
ID типа оборудования, к которому параметр относится
Название параметра
Может быть, единица измерения
4) Таблица "Значения параметров для товаров":
ID параметра
ID товара
значение параметра
Если есть вопросы по такой структуре задавай. На мой взгляд, это наиболее гибкий и универсальный вариант: можно добавлять что угодно (типы оборудования, типы параметров) без изменения структуры базы и даже самого скрипта!
Зато запросы будут более длинные.
-
http://phpclub.ru/talk/showthread.php?s=&threadid=44776&
-
Точно!
Спасибо.
Меня видимо просто заклинило немножко. :)
-
Еще, раз уж я начал спрашивать...
как быть с типом параметров ?
Ведь они могут быть как строковые, так и числовые.
Можно конечно числа сделать строками, но тогда пропадает возможность сравнения больше, меньше.
Может это можно обойти ?
-
secam:
Можно конечно числа сделать строками, но тогда пропадает возможность сравнения больше, меньше.
Чем-то приходится жертвовать для универсализации. Но ведь тебе никто не мешает привести строки обратно к числам.
Также можешь сделать флаг "должен ли параметр быть числом" в таблице "Параметры", и на основе его проверять каждое вводимое значение в таблицу "Значения параметров для товаров". А если хочешь ещё универсальнее - в таблицу параметры добавляется поле "Регулярное выражение", которому должны соответствовать значения параметров.
Заметь, при таком подходе скрипт пишется один раз и навсегда. ;)
-
Вообще то есть такая мысль:
Сделать в таблице значение параметров - 2 поля значения.
Одно CHAR(N), а второе INT.
А для каждого параметра использовать флаг, является он числом или нет. И соответственно значение дублировать в INT для числовых полей (при внесении и редактировании)
Тогда, если надо найти монитор с частотой развертки больше 100Hz, можно будет переложить работу по поиску на MySQL.
Select .... WHRE int_value>100 and param=...
Вместо ручного перебора.