Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何正确关联数据?_Sql_Django_Postgresql_Django Models_Entity Relationship - Fatal编程技术网

Sql 如何正确关联数据?

Sql 如何正确关联数据?,sql,django,postgresql,django-models,entity-relationship,Sql,Django,Postgresql,Django Models,Entity Relationship,我有一个数据库,存储来自不同零售商的衣服: 所以每种产品都有不同的颜色 每种产品也有不同的尺寸 每种尺寸也有不同的颜色 现在,对于每种产品以及每种不同的尺寸和颜色,可能会有不同的价格 我正在使用Django来实现这一点,我想知道这个数据库关系是如何工作的 我要这样的吗 class Product(models.Model): name = model.CharField() class Size(models.Model): size_of_product = model.

我有一个数据库,存储来自不同零售商的衣服:

  • 所以每种产品都有不同的颜色
  • 每种产品也有不同的尺寸
  • 每种尺寸也有不同的颜色
  • 现在,对于每种产品以及每种不同的尺寸和颜色,可能会有不同的价格
我正在使用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()
谁能给我推荐一个更好的解决方案,因为显然我还没有太多的数据库实践经验


谢谢大家!

我建议以下内容与您的初始设计接近:

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(...)
因此,使用上述设计,我们可以为我们的每种产品支持我们想要的任意多个特性。

好的,那么您正在为服装建模。(双关语绝对是有意的!)好吧,让我们看看我们能做些什么

  • 每种产品都有不同的颜色
好的。实体
产品
具有属性
颜色
。让我们继续

  • 每种产品也有不同的尺寸
又好了。实体
产品
具有属性
大小
。到目前为止还不错

  • 每种尺寸也有不同的颜色
嗯。等等虽然产品可能有尺寸和颜色,但尺寸不能有颜色,颜色也不能有尺寸。作为属性,这些属性与产品相关,而不是彼此相关。此时,您的建模失败

我想你的意思是,并非所有颜色都有各种尺寸。这是不同的。在这种情况下,颜色与产品不直接相关,而是与产品/尺寸组合相关


您已正确地将其标识为多对多关系。但它介于颜色和中间产品/尺码组合之间,而不是直接与产品相关。

谢谢!很不错的!唯一的问题是,我可以有一个不同的价格大小和颜色的组合,我不知道我是否可以在这里实现这一点。所以像颜色一样:蓝色尺码:中号会有一个价格,而颜色:红色尺码:中号可以有另一个尺码。这两种方法都可以实现。我认为很明显,对于第一种方法,您只需为产品X添加一个
ProductPrice
,其值为(X,蓝色,中等,price1)和(X,红色,中等,price2)。关于第二种方法,您只需添加两个具有不同价格和不同值的
产品
(一个带有红色和中等颜色,另一个带有蓝色和中等颜色) 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()