使用: SQL Server 2008、Entity Framework、WCF 4 REST
監視システム(別名アプリ)によって生成された測定データを保持するためのテーブルがあります。現在、アプリ内で監視されている既知のデータは約 10 種類あり、それぞれが表の列に対応しています。各顧客は、各アプリを「カスタマイズ」して、1 ~ 10 個のデータをキャプチャできます。分析に関心のある情報のみをキャプチャする必要があります。この単純な固定スキーマでは、すべてがうまく機能しています (そしてパフォーマンスも良好です)。このスキーマはマルチテナントになるように設計されているため、複数の場所にある複数の顧客にまたがる複数のアプリケーションが、同じ DB にデータを送り込むことができます。数百万行の測定データです (以前に 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の関係があるユーザーテーブル、ロールテーブルなどがあります。
参考までに、Web アプリはデータを表、グラフなどで表示します (REST Web サービス層を介して通信します)。