0

リレーション ベースのデータベースを設計しようとしていますが、同時に時系列データを保存しています。

たとえば、私は1つのテーブルを持っています

CREATE TABLE [dbo].[Fund](
[FundID] [int] NOT NULL,
[FundName] [nvarchar](50) NULL,
[FundCurrency] [nchar](3) NOT NULL,
 CONSTRAINT [PK_Fund] PRIMARY KEY CLUSTERED 
)

最初の列の名前「Dates」を除いて、データを保存する別のテーブルがあります。他のすべては f+fundID、たとえば f1001 です。

CREATE TABLE [dbo].[FundData](
[Dates] [datetime] NOT NULL,
[f1001] [float] NULL,
 CONSTRAINT [PK_FundData] PRIMARY KEY CLUSTERED 
)

この単純な方法が効率的かどうかはわかりません。処理するデータはそれほど多くないためです。毎日の見積もり、最大 10 年間の毎日のデータ、最大 500 列。

しかし、私が直面している本当の問題は、入力 FundID と BeginDate と EndDate を使用して、日付を含む一連のデータを返す UDF を作成する方法です。または、FundID と Date を指定して単一引用符を 1 つ返すストアド プロシージャを作成する方法。

UDF は動的な列名を受け入れないため、これを実現する方法が本当にわかりません。データの保存方法を再設計するか、UDF を作成するスマートな方法を使用します。

事前にどうもありがとうございました

4

1 に答える 1

0

FundId を外部キーとして FundData に追加し、各レコードに開始日と終了日を追加する必要があります (問題を正しく理解していると仮定します)。

CREATE TABLE [dbo].[FundData](
[Dates] [datetime] NOT NULL,
[FundId] int NOT NULL,
[Value] [float] NULL,
[BeginDate] [datetime],
[EndDate] [datetime],
 CONSTRAINT [PK_FundData] PRIMARY KEY CLUSTERED,
 CONSTRAINT [FK_FundData_Fund] FOREIGN KEY FundId REFERENCES Fund(FundId)
)

次に、次のように実行できます。ここで@FundId, @BeginDate、 と@EndDateはすべて T-SQL 変数またはストアド プロシージャ パラメーターです。

SELECT Value
FROM FundData
WHERE FundID = @FundId
AND BeginDate >= @BeginDate
AND EndDate <= @EndDate
于 2013-06-28T17:14:33.440 に答える