用于收集可配置人口统计数据的数据库设计是什么?

时间:2008-10-05 18:31:45

标签: sql-server database database-design

我正在为慈善学生组织申请。该应用程序将跟踪(主要)学生参加活​​动的参与和筹款。我们要做的事情之一是从我们的企业目录中收集一些关于注册该活动的学生的人口统计信息,以用于评估营销,并为年度,专业,大学等的学生参与管理部门构建报告。该项目的目标之一是将应用程序推广到其他大学的类似组织。我正在设计一个带有插件架构的应用程序,用于身份验证和目录访问,使其更加通用。

到目前为止,我已经提出了几种不同的方法来将人口统计信息存储在数据库中。我可以假设大多数大学都希望收集(并提供相关信息来源)类似的人口统计信息。在这种情况下,我可以在注册表的列中保留人口统计信息的适当部分(每年更改的内容),其余部分在参与者表中(对于个人而言是不变的)。或者,我考虑保留一个人口统计表,其中包含每个注册和所需属性的注册ID,属性,值三元组。我认为第一个选项更容易查询报告,而第二个选项更灵活。

我想知道是否有其他替代品我没有考虑过。或者,如果您遇到类似的问题,您是如何处理它的(以及您对结果的满意度)?

2 个答案:

答案 0 :(得分:1)

以下是我的想法:

  • 您不应该将人口统计与注册联系起来。它在逻辑上没有意义,这总是会导致实际问题。您可以改为创建人口统计信息历史记录表,例如StudentID,StartDate,EndDate,xxxDemographics,yyyDemographics ......)
  • 不同的学术问题可能会有不同的人口统计需求。要减少自定义,您可能需要对配置表中的所有定义进行软编码,例如受众特征(DemographicsID,DemographicsDesc)并保留学生和人口统计数据之间的关系表,例如StudentDemographics(StudentID,DemographicsID ...)。上述解决方案的唯一技巧是您可能希望在某些报告上使用PIVOTing。

答案 1 :(得分:0)

如果你编写代码的方式是添加列不会破坏它(或者很容易更新),例如小心SELECT *并在INSERT中指定列,那么从你的描述中它不会听起来你需要属性值的超灵活性,所以我坚持使用选项1。