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.
- 所以每种产品都有不同的颜色
- 每种产品也有不同的尺寸
- 每种尺寸也有不同的颜色
- 现在,对于每种产品以及每种不同的尺寸和颜色,可能会有不同的价格
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()