问候堆垛机,
我正在尝试为应用程序提供最佳数据库架构,以便用户创建调查并将其呈现给公众.有大量"标准"人口统计字段,大多数调查(但不是全部)将包括,如名字,姓氏等.当然,用户可以创建无限数量的"自定义"问题.
我想到的第一件事是这样的:
Survey
ID
SurveyName
SurveyQuestions
SurveyID
Question
Responses
SurveyID
SubmitTime
ResponseAnswers
SurveyID
Question
Answer
Run Code Online (Sandbox Code Playgroud)
但每次我想查询数据时,这都会很糟糕.它似乎危险地接近内部平台效应
一个改进是在响应表中包含尽可能多的字段:
Responses
SurveyID
SubmitTime
FirstName
LastName
Birthdate
[...]
Run Code Online (Sandbox Code Playgroud)
那么至少对来自这些公共列的数据的查询是直截了当的,并且我可以查询,例如,每个回答任何调查的人的平均年龄,他们给出了他们的出生日期.
但似乎这会使代码复杂化一些.现在,要查看调查中询问的问题,我必须检查哪些常见响应字段已启用(使用,我猜测,调查中的位域)以及SurveyQuestions表中的内容.而且我不得不担心特殊情况,比如有人试图创建一个"自定义"问题,该问题会在"响应"表中复制"常见"问题.
这是我能做的最好的吗?我错过了什么吗?
我有一个 Django 网站,它有一个侧边栏,其中有各种不同的框,可以根据页面的不同进入其中。例如,“最新评论”或“最新推文”或“精选故事”。这些框都需要数据库查询才能运行。
我可以简单地添加most_recent_comments 以及每个页面的视图所需的任何其他变量。但这感觉很脆弱。我希望能够通过编辑模板来移动和更改框。
所以我的另一个想法是我可以使用上下文处理器将所有框可能需要的所有变量添加到每个页面,但是 ORM 是否足够智能,只能对实际使用这些变量的页面运行查询?或者即使我的页面上没有框,它也会访问数据库吗?
所以我想我想要的是某种自定义标签,我可以只说 {% most_recent_comments_box %} 并且它足够聪明,可以从数据库加载它需要的任何变量,然后调用一个小模板文件。这是正确的方法吗?我该如何做到这一点?