Python 什么';在关系数据库中存储一组简单的字典条目时,最佳做法是什么?
这是我正在处理的数据的简化版本Python 什么';在关系数据库中存储一组简单的字典条目时,最佳做法是什么?,python,sql,flask,database-design,sqlalchemy,Python,Sql,Flask,Database Design,Sqlalchemy,这是我正在处理的数据的简化版本 { "name": "Sinistrofu Cloak", "itemType": "Cloak", "level": "200", "stats": [ { "stat": "Vitality", "minStat": 251, "maxStat": 300 }, { "stat": "Strength", "min
{
"name": "Sinistrofu Cloak",
"itemType": "Cloak",
"level": "200",
"stats": [
{
"stat": "Vitality",
"minStat": 251,
"maxStat": 300
},
{
"stat": "Strength",
"minStat": 71,
"maxStat": 100
},
{
"stat": "Wisdom",
"minStat": 16,
"maxStat": 25
}
}
这是我的简化模型:
class ModelItem(Base):
__tablename__ = 'item'
id = Column('id', UUID(as_uuid=True), unique=True, nullable=False, primary_key=True)
name = Column('name', String, nullable=False)
item_type = Column('item_type', String, nullable=False)
level = Column('level', Integer, nullable=False)
stats = Column('stats', JSON)
大多数字段以及它们如何转换到我的数据库中是不言而喻的。我真的很好奇我应该如何构建stats
列。以JSON格式存储会更好,还是更适合创建一个新的stat
模型,并为其创建一个新表,用外键链接回项
模型
对我来说,这样做似乎有点不必要,但作为一个新手,这可能有好处,因为我还不了解在我看来,你应该用外键创建第二个统计表。这是在SQL中执行此操作的标准方法,允许您稍后根据项目的统计信息筛选项目(例如,如果您正在查找具有特定生命力的项目,这可能会很有用) SqlAlchemy还允许您创建关系,这样当您获得
ModelItem
时,就可以立即启动整个结构,而无需单独查询或解析这些统计信息或JSON
现在制作第二个模型所需的额外工作是值得的,这样以后您就可以用最小的努力获得完整的对象层次结构。我想让我质疑是否这样做的是数据的本质。在我看来,一个
stat
似乎不太复杂,也不太清楚,不足以保证制作另一个模型。对我来说,这似乎是一个更大数据类型的一个方面,它是一个项目的所有集合统计数据。如果那样的话sense@SamL虽然从业务角度来看,stat
可能无法保证模型的可靠性,但从技术角度来看,您不应该(也可能无法)将stat
条目存储为JSON。例如,MySQL不支持JSON作为本机数据类型(请参阅),因此您将它们存储在文本字段中。这使得事情变得更加复杂。啊,我使用的是支持JSON的postgres。很高兴知道它不是所有RDBMS的一个特性。知道这一点肯定有助于水泥为数据制作另一个表格。谢谢你的洞察力