0

我终于偶然发现了一个我已经找不到答案的问题...

我正在开发一个数据库,该数据库将存储随时间记录的采样数据。最初,客户建立了一个非常特定于他们当前记录的数据的表,但是,他们担心随着它们的扩展,收集的数据可能会开始变化,并且可能会出现更多或至少不同的列需要。

当前型号:

+------------------+     +------------------+
|    FACILITIES    |     |   DATA_RECORD    |  
+------------------+     +------------------+  
| ID               |     | ID               |
| NAME             |     | FACILITY_ID      |
| DESC             |     | TIMESTAMP        |
| etc.             |     | TEMP_WATER       |
+------------------+     | TEMP_AIR         |
                         | pH_WATER         |
                         | etc...           |
                         +------------------+

我认为数据库应该设计如下:

+------------------+     +------------------+     +------------------+
|    FACILITIES    |     |   DATA_RECORD    |     |   COLUMNS        |  
+------------------+     +------------------+     +------------------+  
| ID               |     | ID               |     | ID               |
| NAME             |     | FACILITY_ID      |     | NAME             |
| DESC             |     | details etc..    |     | DESC             |
| etc.             |     +------------------+     | UNITS, etc...    |
+------------------+                              +------------------+

+------------------+ 
|    DATA_POINT    | 
+------------------+ 
| ID               | 
| DATA_RECORD_ID   | 
| COLUMN_ID        | 
| VALUE            | 
+------------------+ 

我的问题是:

  1. 这是设计数据库的最佳方式,还是有我不熟悉的更好方式。
  2. 如何形成查询语句以返回每个数据记录及其每个关联列?
  3. 是否有普遍接受的良好数据类型可用作 DATA_POINT.VALUE?例如浮点数、十进制数...?

非常感谢你的帮助。

真挚地,

内特·K。

4

1 回答 1

1

看看您的要求,我认为您会更倾向于实体属性值类型的设计,这种设计通常很难查询(尽管设置起来相当简单)并且可扩展性不强。

您可以在此站点或谷歌上搜索 EAV 模型以查看有关此的讨论。

http://www.simple-talk.com/content/print.aspx?article=843

实体属性值数据库与严格的关系模型电子商务

http://tkyte.blogspot.com/2009/01/this-should-be-fun-to-watch.html

对于您的情况,您能否发布您需要收集的不同类型的设施和数据点?可能您可以使用类型和子类型对此进行建模吗?

于 2012-07-14T01:44:07.363 回答