研究设施的数据库架构

Database Schema for Research Facility

我正在为研究机构设计数据库模式。数据库应存储主要包含预定义(因变量或自变量)变量的实验样本,但可能需要数据库设计日期未知的项目相关变量。

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

  1. 将数据存储在 wide data structure 中,即少数 3NF 规范化表的列代表变量 (dependent/independent),每行都是一个样本。
  2. Entity–attribute–value model / 面向事件,即每个记录的值都作为一个事件存储。

您能否为这种情况推荐任何这种方法或其他方法?非常感谢大家的回复。

这些方法都不会完全起作用...使用您的方法 1,您不能添加新变量,虽然您的方法 2 会起作用,但在灵活性性能或可读性方面不会很好...而且因为您提到'Advanced users should be able to use the database via SQL for data analysis' 使用这种方法会非常困难。

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

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