Автор Тема: Вопрос по проектированию  (Прочитано 3733 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн secam

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.trnavigator.ru
Вопрос по проектированию
« : 08 Сентября 2004, 12:25:25 »
Господа разработчики и проектировщики,

пишу интернет магаизн компьютерного железа,
из готовых решений ничего достойного найти не удалось, изобретаю свой "велосипед" :)
Perl + MySQL 4.1

А вопрос вот в чем:
Известно, что компьютерное железо бывает очень разным, HDD и Монитор например.
И то и другое, с точки зрения магазина - это товар.
Но монитор может иметь такие параметры, как размер экрана, рабочие разрешения, частоты развертки и т.д.
А HDD совсем другие параметры: Емкость, скорость вращения диска и т.д.
Подскажите, как спроектировать таблицы, так,чтобы возможно было осуществлять поиск по этим параметрам оборудования, например найти монитор с частотой развертки более 100Гц и т.д.
И второе условие - возможность добавить новый тип оборудования, не переделывая всю базу.

Из моих идей, есть только вариант определить список типов оборудования и для каждого типа создать свою таблицу с набором параметров. А в таблице товаров давать тип из списка и ID из соответствующей таблицы с параметрами.
Но может есть способ удобнее ?

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос по проектированию
« Ответ #1 : 08 Сентября 2004, 13:23:10 »
Не очень понял твой вариант. Но могу предложить нижеследующее (нечто подобное я реализовывал совсем недавно в похожей ситуации).

1) Заводишь таблицу "Тип оборудования":
ID типа оборудования (primary key)
Название типа оборудования.

2) Заводишь таблицу "Товары":
ID товара (primary key)
ID типа оборудования
Название товара
Ещё какие-либо общие для всех товаров параметры

3) Таблица "Параметры":
ID параметра (primary key)
ID типа оборудования, к которому параметр относится
Название параметра
Может быть, единица измерения

4) Таблица "Значения параметров для товаров":
ID параметра
ID товара
значение параметра

Если есть вопросы по такой структуре задавай. На мой взгляд, это наиболее гибкий и универсальный вариант: можно добавлять что угодно (типы оборудования, типы параметров) без изменения структуры базы и даже самого скрипта!
Зато запросы будут более длинные.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн secam

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.trnavigator.ru
Вопрос по проектированию
« Ответ #3 : 08 Сентября 2004, 14:29:00 »
Точно!
Спасибо.

Меня видимо просто заклинило немножко. :)

Оффлайн secam

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.trnavigator.ru
Вопрос по проектированию
« Ответ #4 : 08 Сентября 2004, 17:06:20 »
Еще, раз уж я начал спрашивать...

как быть с типом параметров ?
Ведь они могут быть как строковые, так и числовые.
Можно конечно числа сделать строками, но тогда пропадает возможность сравнения больше, меньше.
Может это можно обойти ?

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Вопрос по проектированию
« Ответ #5 : 08 Сентября 2004, 17:27:30 »
Цитировать
secam:
Можно конечно числа сделать строками, но тогда пропадает возможность сравнения больше, меньше.


Чем-то приходится жертвовать для универсализации. Но ведь тебе никто не мешает привести строки обратно к числам.

Также можешь сделать флаг "должен ли параметр быть числом" в таблице "Параметры", и на основе его проверять каждое вводимое значение в таблицу "Значения параметров для товаров". А если хочешь ещё универсальнее - в таблицу параметры добавляется поле "Регулярное выражение", которому должны соответствовать значения параметров.

Заметь, при таком подходе скрипт пишется один раз и навсегда. ;)

Оффлайн secam

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.trnavigator.ru
Вопрос по проектированию
« Ответ #6 : 08 Сентября 2004, 17:50:15 »
Вообще то есть такая мысль:
Сделать в таблице значение параметров - 2 поля значения.
Одно CHAR(N), а второе INT.
А для каждого параметра использовать флаг, является он числом или нет. И соответственно значение дублировать в INT для числовых полей (при внесении и редактировании)

Тогда, если надо найти монитор с частотой развертки больше 100Hz, можно будет переложить работу по поиску на MySQL.
Select .... WHRE int_value>100 and param=...
Вместо ручного перебора.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28