我有几个表用于将自然键减少为代理键。
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。否则,我需要为每个表创建一个单独的 Header/LineRelatedData表。这些数据最终会聚合到一个表中,并且拥有单独的RelatedData表意味着具有强关系的单独列或没有关系的单个列。
我正在使用 SSIS 插入我的数据,并且此表方案导致 RBAR(通过痛苦行进行行)方法来插入父级然后插入子级。我可以创建一个视图并使用而不是触发器来简化它,但是有没有更好的方法来插入记录,或者这是表设计错误的症状?