研究机构的数据库模式

时间:2016-12-12 14:39:56

标签: database-design database-schema

我正在为研究机构设计数据库架构。数据库应存储大多数预定义(依赖或独立)变量的实验样本,但可能需要项目数据库设计日期未知的项目依赖变量。

  • 每个样本都是项目的一部分,只有在与特定项目相关时才会记录一些变量。
  • 每个记录的值应包含元数据(例如,时间戳和记录该值的用户)。
  • 每个样本都有基于特定事件随时间变化的状态。
  • 高级用户应该能够通过SQL使用数据库进行数据分析。

目前,我正在考虑两种方法:

  1. 将数据存储在wide data structure中,即少数3NF规范化表中的列代表变量(依赖/独立),每行都是一个样本。
  2. Entity–attribute–value model /面向事件,即每个记录的值都存储为事件。
  3. 您能为这种情况推荐任何此方法或其他方法吗?非常感谢你们的回复。

1 个答案:

答案 0 :(得分:0)

这些方法都不会完全有效......使用您的方法1您无法添加新变量,而您的方法2将起作用,在灵活性性能或可读性方面也不会很好...也因为您提到'高级用户应该能够通过SQL使用数据库进行数据分析,这种方法将非常困难。

最好的妥协方案可能是两者兼而有之,将当前所知的所有变量存储为列,然后使用单独的EVA(实体值属性)表,可以添加自定义变量。这使得大部分逻辑保持良好,同时在需要时允许动态变量。如果可以添加的变量数量有一个上限,您可以考虑在表上使用SpareDateVariable1Name,SpareDateVariable1Value,SpareIntegerVariable1Name,SpareIntegerVariable2Name列的混合方法,以允许添加一些自定义变量而无需使用< / p>

主要问题是在关系数据库中,您需要预先了解所有列。这就是它们的设计方式。您应该考虑使用像MongoDB这样的NoSQL解决方案,它将条目存储为没有严格模式的“文档”,因为在传统的关系数据库中根本没有很好的方法来解决这个问题,但是这些类型的数据库将更好地处理这种情况。