我有这个数据库,我存储来自不同零售商的衣服:
我正在使用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 :(得分: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
s(例如蓝色,棕色或皮革,棉花等)。最后,您的Product
将是具有价格的特定商品,属于特定的Category
,并且对于该Value
的{{1}}具有特定Characteristic
个{ {1}}。
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()
因此,使用上述设计,我们可以为每个产品提供尽可能多的特性。
答案 1 :(得分:0)
好的,所以你要为服装造型。 (双关语绝对有意!)好吧,让我们看看我们能做些什么。
精细。实体product
具有属性color
。让我们继续。
再次罚款。实体product
具有属性size
。到目前为止一切都很好。
庵。坚持,稍等。虽然产品可能具有尺寸和颜色,但尺寸不能具有颜色,颜色也不能具有尺寸。作为属性,这些属性与product
相关,而不是彼此相关。你的建模在这一点上破裂了。
我认为你的意思是所有颜色都没有。这是不同的。在这种情况下,颜色与产品没有直接关系,而是产品/尺寸组合。
您已将此正确识别为多对多关系。但它是在颜色和中间产品/尺寸组合之间,而不是直接与产品。