我应该规范化我的模型,还是为这种API(虚拟表)提供大表?

时间:2014-07-10 02:53:52

标签: python django django-models django-rest-framework

我正在尝试创建一个Web应用程序,允许用户创建“虚拟表”,每个虚拟表都有自己的行,列和数据。每个用户都可以CRUD他们自己的虚拟表(使用我试图用django-rest-framework构建的API),但他们不应该能够看到其他用户的表。

到目前为止,我对模型的第一次尝试看起来像这样:

class Vtable(models.Model):
    user = models.ForeignKey(User) 
    table_name = models.CharField(max_length=200)

class Vcolumn(models.Model):
    table = models.ForeignKey(Vtable)
    column_name = models.CharField(max_length=200)

class Vrow(models.Model):
    table = models.ForeignKey(Vtable)
    added_date = models.DateTimeField('date added')

class Vdata(models.Model):
    table = models.ForeignKey(Vtable)
    row = models.ForeignKey(Vrow)
    column = models.ForeignKey(Vcolumn)
    data = models.CharField(max_length=200)

我刚刚完成了django-rest-framework的教程,现在我不确定是否有意义将所有内容规范化。有一个大桌子会更好吗?我想,实现序列化以及权限进入组合时会非常烦人。我是Django的新手,我正在寻找一些指导。

提前致谢!

1 个答案:

答案 0 :(得分:1)

对于这类事情,您可能需要考虑将每组表数据存储在JSON字段中,而不是尝试将数据库表强制转换为他们不太适合的样式。

对表存储使用普通JSON字段可能适合也可能不适合,具体取决于您需要在表内执行哪种查找(如果有),以及它们包含多少数据,但它肯定更容易使用。

如果您需要确保某些单元格属于特定数据类型,您仍然可以使用REST框架的序列化程序或类似的方法对表格单元格中的数据实施约束。