さまざまなベンダーから毎月インポートする一連のフラット ファイルがあり、どのファイルからどのレコードが取得されたかを追跡したいと考えています。
現在:
CREATE TABLE Fact.Order
(
Id INT NOT NULL IDENTITY PRIMARY KEY
,OrderId INT NOT NULL
,VendorId INT NOT NULL REFERENCES Vendor (Id)
,OrderTypeId INT NOT NULL REFERENCES OrderType (Id)
,SaleDate DATETIME2 NOT NULL
,Amount MONEY NOT NULL
);
ファイル追跡テーブル:
CREATE TABLE [File]
(
Id INT IDENTITY NOT NULL PRIMARY KEY,
VendorId INT NOT NULL REFERENCES Vendor (Id)
FileHash BINARY(20) NOT NULL,
FileSize BIGINT NOT NULL,
ModifiedDate DATETIME2 NOT NULL,
FileRecordCount INT NOT NULL,
CreatedDate DATE NOT NULL DEFAULT GETUTCDATE(),
UpdatedDate DATE NOT NULL DEFAULT GETUTCDATE(),
IsDelete BIT NOT NULL DEFAULT 0,
CONSTRAINT UQ_Files_FileHash_IsDelete UNIQUE NONCLUSTERED
(
FileHash,
IsDelete
) WITH (IGNORE_DUP_KEY = ON)
);
CREATE TABLE FileImport
(
Id INT IDENTITY NOT NULL PRIMARY KEY,
FileId INT NOT NULL REFERENCES [File] (Id),
OrderTypeId INT NOT NULL REFERENCES OrderType (Id),
ImportRecordCount INT NOT NULL,
CreatedDate DATE NOT NULL DEFAULT GETUTCDATE(),
UpdatedDate DATE NOT NULL DEFAULT GETUTCDATE(),
IsDelete BIT NOT NULL DEFAULT 0
);
FileImport
キーをテーブル内に保持する方が望ましいでしょうか、Fact.Order
それともデータを独自のテーブルに配置する必要がありますか?
編集:
VendorId
これまでのところ、テーブルからを削除することにしたFile
ので、ファイルに関する情報のみが保存されるようになりました。
次に、ビジネス キーに関連付ける一意の識別子を含む各ファクト テーブルのメタデータ テーブルを作成しました。
CREATE TABLE File.Order
(
OrderId INT NOT NULL,
VendorId INT NOT NULL,
FileId INT NOT NULL REFERENCES File (Id),
CreatedDate DATE NOT NULL DEFAULT GETUTCDATE(),
UpdatedDate DATE NOT NULL DEFAULT GETUTCDATE(),
IsDelete BIT NOT NULL DEFAULT 0,
CONSTRAINT UQ_File_Order_OrderId_VendorId PRIMARY KEY CLUSTERED
(
OrderId,
VendorId,
FileId
)
)