日々の測定データを記録し報告するシステムを設計しています。データは、カテゴリ識別子、日付/時刻、測定データ(浮動小数点または整数のいずれかで最大500個あります)から構成されます。
カテゴリはツリー構造として視覚化され、データはノードとリーフに関連付けられます。
生データは次の形式でCSVとして来:フラットテーブルから隣接関係リストへのプロジェクトデータ
1/6/2001 15:55, /Node1/Node2/Node3, 121, 34, 452, 651, 167
1/6/2001 15:55, /Node1/Node2/Node3/LeafA, 12, 34, 45, 65, 67
1/6/2001 15:55, /Node1/Node4/Node5/LeafB, 21, 32, 43, 54, 65
私は、ツリー構造のために(Database Structure for Tree Data Structureを参照)隣接リストを使用して計画しています。また、測定データと日付/時刻の2つ目のテーブルを用意する予定です。このようにして、ツリー構造が最初に生成されると、それは測定データテーブルによって繰り返し参照されることができる。また、Adjacency Listテーブルを小さくすると、システムがはるかに読みやすくなります:)。以下のカテゴリテーブルでは、名前はノードまたはリーフ名(たとえばノード1またはリーフA)であり、フルネームは全体の分岐パス(たとえばノード1 /ノード2 /ノード3 /リーフA)である。どちらも必要なのか分かりませんが、必要に応じてFullNameを再作成する必要がないので便利です。システムにデータをロードする
CREATE TABLE [dbo].[Category](
[CatId] [int] IDENTITY(1,1) NOT NULL,
[ParentCatId] [int] NULL,
[Name] [nvarchar](30) NOT NULL,
[FullName] [nvarchar](MAX) NOT NULL
CONSTRAINT [PK_Category] PRIMARY KEY CLUSTERED
(
[CatId] ASC
) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[MeasurementData](
[CatId] [int] NOT NULL,
[DateCollected] [datetime] NOT NULL,
[foo] [int] NOT NULL,
[bar] [float] NOT NULL,
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[MeasurementData] WITH CHECK ADD CONSTRAINT [FK_ MeasurementData _Category] FOREIGN KEY([CatId])
REFERENCES [dbo].[Category] ([CatId])
GO
ALTER TABLE [dbo].[MeasurementData] CHECK CONSTRAINT [FK_ MeasurementData _Category]
GO
、私は(SQL Server 2008のに)平らなテーブルにCSVをロードして、階層的なテーブル構造に平らなテーブルを投影するBCPを使用して考えていました。
Q1:T-SQLまたはC#(SQL Server以外のC#アプリケーション)を使用してこの投影を試す必要がありますか?
Q2:上記のカテゴリ識別子を指定して、適切なリーフをすばやく見つけ出す(または作成して返す)既存のアルゴリズムを持っているのは誰ですか?
FYI、再帰的なクエリ構文の周りに、WITHキーワードとそれに続く共通のテーブル式を使用して、私は頭を回しています。
https://stackoverflow.com/questions/tagged/common-table-expression
http://media.pragprog.com/titles/bksqla/trees.pdf
あなたのテーブル構造が少しあやふやかもしれ事前