我的数据看起来像这样:
projects = [
{
'title': 'Project A',
'point_of_contact': {'name': 'Johnny', 'org': 'Box'},
'overrides': [4, 7, 99, 42],
'tier_mapping': {1: 2000, 2: 4000, 3: 8000, 4: 12000},
'milestones': [{'year': 2014, 'achievement': 'Model development'}, {'year': 2014, 'achievement': 'Model approved by board'}]
},
{
'title': 'Project B',
...
}
正如你所知,没有明显的结构。我想将此添加到我的sql支持的烧瓶Web应用程序中。最简单的选择是使用flask-sqlalchemy创建一个表:
class Project(db.Model):
id = db.Column(db.Integer, primary_key=True)
data = db.Column(db.PickleType)
另一种选择是为每个迭代项创建一个表,并将其映射到各自的Project
。例如,在项目及其覆盖之间创建关系可能如下所示:
class Project(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50))
overrides = db.relationship('Override', backref='mapped_project', lazy='dynamic')
class Override(dn.Model):
id = db.Column(db.Integer, primary_key=True)
override = db.Column(db.Integer)
project_id = db.Column(db.Integer, db.ForeignKey('project.id'))
我的问题是以下数据库模型中哪一个“更好”?有没有使用第一个模型(性能等),这显然更容易设置。我想唯一的骗局是泡菜类型不清楚我们存储的是什么。
请注意,此Web应用程序每个月都在增长,所以我更喜欢灵活的数据库模型。我知道MongoDB
可能是更好的选择,但所有内容都已经用SQL编写,我不想重写整个应用程序。