У меня есть несколько таблиц, которые используются для уменьшения естественных ключей в суррогатные ключи.Попытка вставить записи родительского ребенка со свободными отношениями
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
. Эти данные в конечном итоге объединяются в одну таблицу, а отдельные таблицы RelatedData
означают либо отдельные столбцы с сильными отношениями, либо один столбец без отношения.
Я использую SSIS для вставки моих данных, и эта схема таблицы приводит к методу RBAR (строка по агонистической строке), чтобы вставить родителя, а затем вставить его. Я мог бы создать представление и использовать вместо триггера, чтобы упростить его, но есть ли лучший способ вставить записи или это симптом плохого дизайна таблицы?