我有几个表用于将自然键减少为代理键。
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(通过痛苦行进行行)方法来插入父级然后插入子级。我可以创建一个视图并使用而不是触发器来简化它,但是有没有更好的方法来插入记录,或者这是表设计错误的症状?