Mysql 如何在django数据库中存储具有不同属性的对象列表?
在mysql中存储数据很简单,比如Mysql 如何在django数据库中存储具有不同属性的对象列表?,mysql,django,postgresql,django-models,Mysql,Django,Postgresql,Django Models,在mysql中存储数据很简单,比如 [ { 'name': 'Object1', 'color': 'red', 'shape': 'ellipse' }, { 'name': 'Object2', 'color': 'green', 'shape': 'circle' } ] 但若对象具有不同数量的属性,那个么当属性是平面属性时,它们就不是嵌套的了 [
[
{
'name': 'Object1',
'color': 'red',
'shape': 'ellipse'
},
{
'name': 'Object2',
'color': 'green',
'shape': 'circle'
}
]
但若对象具有不同数量的属性,那个么当属性是平面属性时,它们就不是嵌套的了
[
{
'name': 'Object1',
'color': 'red',
'shape': 'ellipse',
'eccentricity': 0.5
},
{
'name': 'Object2',
'color': 'green',
'shape': 'circle'
'radius': 5
}
]
有许多属性,所以子分类不是解决方案
在mysql中如何处理它?或者如果这不可能,可能是postgresql
关于非关系数据库,最好使用什么
我需要根据这些属性进行查询
提前感谢。postgres中有一个可用于此类任务的选项。还有许多django应用程序添加了可以与mysql一起工作的JsonField,例如postgres中有一些可以用于此类任务的应用程序。还有许多django应用程序添加了JsonField,可以与mysql一起工作,例如,我不知道为什么要避免子类化,它的构建基本上就是为了这个目的。最好的方法是子类化。对于本例,您可能希望使用shape属性作为主要类。例如,可以创建一个Shape类:
class Shape(models.Model):
color = models.CharField(max_length=20)
class Meta:
abstract = True
class Circle(Shape):
radius = FloatField()
class Ellipse(Shape):
eccentricity = FloatField()
这将在模型中创建两个表格,一个带有颜色和半径列的圆形表格,以及一个带有颜色和偏心列的椭圆表格
若出于某种原因确实希望避免子类化,并且正在使用PostgreSQL,那个么可以声明一个JSONField,该JSONField可能称为attributes或其他类似的不同值。不过,通过编程方式访问它们会更加困难。看起来是这样的:
class Shape(models.Model):
color = models.CharField(max_length=20)
attributes = models.JSONField()
我不知道为什么要避免子类化,它的构建基本上就是为了这个目的。最好的方法是子类化。对于本例,您可能希望使用shape属性作为主要类。例如,可以创建一个Shape类:
class Shape(models.Model):
color = models.CharField(max_length=20)
class Meta:
abstract = True
class Circle(Shape):
radius = FloatField()
class Ellipse(Shape):
eccentricity = FloatField()
这将在模型中创建两个表格,一个带有颜色和半径列的圆形表格,以及一个带有颜色和偏心列的椭圆表格
若出于某种原因确实希望避免子类化,并且正在使用PostgreSQL,那个么可以声明一个JSONField,该JSONField可能称为attributes或其他类似的不同值。不过,通过编程方式访问它们会更加困难。看起来是这样的:
class Shape(models.Model):
color = models.CharField(max_length=20)
attributes = models.JSONField()