自然キーを代理キーに減らすために使用されるテーブルがいくつかあります。
CREATE TABLE Mapping.RelatedData
(
Id INT IDENTITY NOT NULL PRIMARY KEY,
DataSetId INT NOT NULL REFERENCES DataSet (Id),
DataTypeId INT NOT NULL REFERENCES DataType (Id)
)
CREATE TABLE Mapping.RelatedDataForA
(
RelatedDataId INT NOT NULL REFERENCES Mapping.RelatedData (Id),
NatrualColumn1 INT NOT NULL,
NatrualColumn2 INT NOT NULL
)
CREATE TABLE Mapping.RelatedDataForB
(
RelatedDataId INT NOT NULL REFERENCES Mapping.RelatedData (Id),
NatrualColumn3 INT NOT NULL,
NatrualColumn4 INT NOT NULL
)
-- Several other tables for C, D, E, etc..
このようにして、別々のテーブルを持つことができます
CREATE TABLE HeaderFormattedData
(
Id INT IDENTITY NOT NULL PRIMARY KEY,
RelatedDataId INT NOT NULL REFERENCES Mapping.RelatedData (Id)
DataKey INT NOT NULL
-- Other columns
)
CREATE TABLE LinesFormattedData
(
Id INT IDENTITY NOT NULL PRIMARY KEY,
RelatedDataId INT NOT NULL REFERENCES Mapping.RelatedData (Id),
DataKey VARCHAR(50) NOT NULL,
LineId INT NOT NULL
-- Other columns
)
と統一された関係にあることRelatedData
。そうしないと、テーブルごとに個別のヘッダー/行テーブルが必要になりRelatedData
ます。このデータは最終的に 1 つのテーブルに集約されます。別々のRelatedData
テーブルを持つことは、強力な関係を持つ別々の列か、関係のない単一の列のいずれかを意味します。
私は SSIS を使用してデータを挿入しています。このテーブル スキームは、親を挿入してから子を挿入するための RBAR (行による行による行) メソッドにつながります。ビューを作成し、代わりにトリガーを使用して単純化することもできますが、レコードを挿入するためのより良い方法はありますか、それともテーブル設計が悪いことの兆候ですか?