1

さまざまなベンダーから毎月インポートする一連のフラット ファイルがあり、どのファイルからどのレコードが取得されたかを追跡したいと考えています。

現在:

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
    )
)
4

1 に答える 1

1

FileImport fk を Fact.Order テーブルに保存しません。Fact.Order 自体とは何の関係もありません。

インポート レコードを定期的にクエリする必要がある場合は、別のログ テーブルを作成します。File.Order レコードが将来変更または削除されると、記録の一貫性が失われることに注意してください。

履歴記録の場合は、監査の場合は、ファイルにログを記録し、ファイルを別の場所に保管します。

于 2013-06-13T21:39:31.813 に答える