SQL设计:需要能够使用固定模式向表中添加自定义“列”

时间:2011-01-22 03:25:09

标签: sql sql-server database-design azure-sql-database

使用:SQL Server 2008,实体框架,WCF 4 REST

我有一个表用于保存由监控系统(也就是应用程序)生成的测量数据。目前在应用程序中监控大约10种不同的众所周知的数据 - 每个数据对应于表中的一列。每个客户都可以“自定义”他们的每个应用程序,以捕获1到10个数据 - 他们只需要捕获他们有兴趣分析的那些信息。使用这种直接的固定架构,一切都运行良好(性能良好)。这种模式设计为​​多租户,因此多个位置的多个客户的多个应用程序可以将数据泵入同一个数据库 - 数百万行数据库(如果我们之前也要访问Azure,我也不会感到惊讶)长)。

我现在被告知测量应用程序很快就能监视其他“事物”。这个新的清单(到目前为止我被告知大约有150个项目)最终可能会被测量约1000件物品。除此之外,用户可以为要监控/测量的项目指定自己的标准(即自定义测量等于自定义列。)好消息是所有测量数据都是整数。

现在很有趣 - 如何为这种情况设计架构?我真的想保持架构的固定。考虑到大量数据,我还希望尽可能保持高性能。

感谢任何帮助。

当前架构:

CREATE TABLE MeasurementData (
    DataId bigint IDENTITY(1,1) NOT NULL PRIMARY KEY,
    ApplicationId int NOT NULL,    -- FK to Application table
    DateCollected datetime NOT NULL,
    Length int NULL,
    Width int NULL,
    Height int NULL,
    Color int NULL,
    Shape int NULL,
    Mass int NULL
)
CREATE TABLE Application (
    ApplicationId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    CompanyId int NOT NULL,    -- FK to Company table
    SerialNumber nvarchar(50) NOT NULL
)
CREATE TABLE Company (
    CompanyId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    CompanyName nvarchar(50) NOT NULL
)

然后我们有用户表,角色表等,在公司和用户之间有1-n的关系。

仅供参考,网络应用程序将使用表格,图表等显示数据(通过REST Web服务层进行通信)

2 个答案:

答案 0 :(得分:2)

你可以再添加两张桌子吗?一个是测量类型,另一个是从类型到测量本身的映射?

基本上是一个包含{DataId,DataMeasurementTypeId,DataValue}和{DataMeasurementTypeId,DataMeasurementType}的表

这应该允许您提供存储过程来检索表中的所有Datameasurements。

更好的optiom可能是使用Name,Value表来解决它,并让业务对象层负责构建正确的内容。但这比Google的BigTable方法更适合(并且可能执行)比RDBMS更好。

答案 1 :(得分:1)

看一下这些SO示例:onetwothree