Подскажите как реализовать следующее:
есть сущность “объявление”. В зависимости от типа(или объекта) этого объявления (комп, ноут, плеер), нужно прикрутить к нему набор свойств как общих (цена, вес, …), так и специфических (громкость, процессор, формат файлов, …).
1. Сначала думал через наследование, как написано в доке:
class Advertisement(models.Model):
title = models.CharField()
price = models.IntegerField()
…
class Meta:
abstract = True
class CompOptions(Advertisement)
cpu = models.CharField()
ram = models.CharField()
class PlayerOptions(Advertisement)
…
Но мне не нравится то что создаются таблицы compoptions, noutoptions, и т.д. где поля title, price просто дублируются, т.е. с точки зрения БД никакого наследование нету :(
2. держать все свойства в одной таблице тоже плохой вариант, так как получится 20 и более полей, из которых штук 5 общих, а остальные будут специфические для каждоготипа техники. Получится много пустых полей.
3. Выделить таблицу common_options, куда занести все общие свойства, потом создать для каждого девайса по таблице с его спец. свойствами. (благо таких будет ограниченное количество и потом добавить еще будет несложно)
Проблема в том, что это только мои теоретические догадки, не получается “набросать” схему БД.
Подозреваю что надо через связи многие-ко-многим, через дополнительные промежуточные таблицы.
4. В идеале хочется чтобы все было масштабируемо, и избежать варианты создания таблицы свойств для каждого типа товара.
Самое плохое в том что я не могу нарисовать для этого схему БД :(
думал “забить” на БД и заюзать средства Джанго, а он мне уже нагенерит нужных таблиц :)
Приветствуются любые ответы, ткните носом что почитать. (только плиз не в гугл, “БД для чайников” и т.д.)
Спасибо.