Каков наилучший подход к написанию хранимой процедуры для отношения 1: N, выполняющего вставку? - PullRequest
0 голосов
/ 16 ноября 2009

Если у меня есть две таблицы A и B:

A (AId, a1, a2) B (BId, AId, b1, b2, b3)

На первый взгляд, я хотел написать sp (хранимая процедура), включающий два оператора вставки.

Но на секунду мне показалось, что было бы лучше, если бы у меня был отдельный sp для вставки таблицы B, а другой - для вставки таблицы A при вызове вставки sp для B изнутри A.

Пожалуйста, какой подход лучше?

Ответы [ 4 ]

1 голос
/ 16 ноября 2009

Выполните две отдельные процедуры. Даже если вы не видите необходимости разделять их сейчас, обычно точка наступит в будущем, когда вы хотите сделать отдельную вставку только для одного из них. Тогда вы будете рады разделить SP. (разделение интересов)

1 голос
/ 16 ноября 2009

Это зависит: Если вы предполагаете, что сможете повторно использовать SP для B в другом контексте (т.е. вне SP для A), создайте отдельный SP. В противном случае наличие только одного SP (в частности, если это всего лишь простой SP с двумя операторами INSERT) может снизить сложность уровня вашей базы данных.

0 голосов
/ 16 ноября 2009

Вы также можете создать представление для двух таблиц и использовать триггер INSTEAD OF INSERT для представления. Таким образом, вы рассматриваете все как одну таблицу.

CREATE VIEW dbo.vAB
AS
SELECT x.AId, a1, a2, BId, b1, b2 ,b3
FROM dbo.A AS x JOIN dbo.B AS y on x.AID = y.AID
go

CREATE TRIGGER dbo.myInsrt
ON dbo.vAB
INSTEAD OF INSERT
AS
BEGIN
 -- your code here to deal with both tables
END
0 голосов
/ 16 ноября 2009

Я бы сказал, что с точки зрения обслуживания лучше иметь две процедуры, поскольку это делает проект более понятным, а две короткие процедуры легче понять и разработать, чем крупную. В любом случае, я не знаю, будет ли такой подход влиять на производительность.

...