2015-02-01 3 views
0

У меня есть эта база данных, где я хранящий одежду из различных розничных торговцев:Как правильно соотносить данные?

  • Таким образом, каждый продукт имеет различные цвета
  • Каждый продукт также имеет различные размеры
  • Каждый размер имеет также различные цвета
  • Теперь для каждый продукт и для каждого разного размера и цвета могут быть разные цены.

Я использую Django для этого, и я задаю любые мысли о том, как это отношение базы данных может сработать.

Будет ли у меня что-то вроде этого?

class Product(models.Model): 
    name = model.CharField() 

class Size(models.Model): 
    size_of_product = model.CharField() 
    product = model.ForeignKey(Product) 

class Color(models.Model): 
    color_of_product = model.CharField() 
    product = model.ForeignKey(Product) 
    size = model.ManyToManyField(Size,though="Price") 

class price(model.Model): 
    size = model.ForeignKey(Size) 
    color = model.ForeignKey(Color) 
    date =model.Date() 

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

Спасибо!

ответ

0

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

 
class Product(models.Model): 
    name = models.CharField() 

class Size(models.Model): 
    size_of_product = models.CharField() 

class Color(models.Model): 
    color_of_product = models.CharField() 

class ProductPrice(model.Model): 
    size = models.ForeignKey(Size) 
    color = models.ForeignKey(Color) 
    product = modelss.ForeignKey(Product) 
    price = models.DecimalField(...) 

С, что вы будете иметь список продуктов, список размеров и список цветов. Всякий раз, когда вы хотите добавить вариант продукта, вы просто новый экземпляр ProductPrice с ценой комбинации всех трех экземпляров (продукта, размера, цвета).

Однако, как правило, большинство электронных магазинов не работают так, поскольку продукты имеют больше характеристик, чем цвет или размер (например, производитель или материал).

Итак, более общим решением будет иметь модель Category, которая определяет разные категории вещей (обувь, куртки, брюки). Каждый Category имеет номер Characteristic с (например, цвет или материал), и каждый Characteristic имеет ряд возможных Value с (например, синий, коричневый или кожаный, хлопок и т. Д.). Наконец, ваш Product, который будет конкретным предметом с ценой, будет принадлежать определенному Category и имеет конкретные Value s для каждого из Characteristic s этого Category.

 
class Characteristic(models.Model): 
    name = modes.CharField() 


class Category(models.Model): 
    name = modes.CharField() 
    # Each Category can have many characteristics and each 
    # characteristic may be related to many categories (e.g 
    # both shoes and jackets have color 
    characteristics = models.ManyToManyField(Characteristic) 


class Value(models.Model): 
    value = models.CharField() 
    # each value belongs to a specific characteristic 
    characteristic = models.ForeignKey(Characteristic) 


class Product(models.Model): 
    category = models.ForeignKey(Category) 
    # A product will have a number of values (e.g brown, leather) 
    values = models.ManyToManyField(Value) 
    prices = models.DecimalField() 

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

+0

Спасибо! Очень хорошо! Единственное, что я могу иметь комбинацию размера и цвета с разными ценами, и я не знаю, могу ли я это достичь. Так как цвет: синий размер: средний будет иметь одну цену, а цвет: красный с размером: средний может иметь другой размер. – Nazariy1995

+0

Вы можете определенно добиться этого с помощью * обоих * подходов. Я думаю, что очевидно, что при первом подходе вы просто добавите «ProductPrice» для продукта X со значениями (X, синий, средний, цена1) и (X, красный, средний, цена2). Что касается второго подхода, вы просто добавите два '' продукта '' с разными ценами и * разными * значениями (один с красным и средним, а другой с синим и средним) – Serafeim

0

Итак, вы моделируете одежду. (Пунн абсолютно предназначен!) Хорошо, посмотрим, что мы можем с этим поделать.

  • Каждый продукт имеет различные цвета

Fine. У объекта product есть атрибут color. Давай продолжим.

  • Каждый продукт также имеет различные размеры

Fine снова.У объекта product есть атрибут size. Все идет нормально.

  • Каждый размер имеет также различные цвета

Um. Оставайтесь на линии. Хотя продукт может иметь размер и цвет, размер не может иметь цвет, а цвет имеет размер. В качестве атрибутов они относятся к product, а не друг к другу. На данный момент ваше моделирование ломается.

Я думаю, что вы имеете в виду, что все цвета недоступны для всех размеров. Это другое. В этом случае цвет напрямую не связан с продуктом, а комбинация продукта/размера.

Вы правильно определили это как отношение «многие ко многим». Но это между цветом и промежуточным сочетанием продукта/размера, а не напрямую с продуктом.

Смежные вопросы