Хранимая процедура добавления фильма - PullRequest
1 голос
/ 07 марта 2012

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

У меня есть следующие таблицы:

  1. «Фильм» (MovieID, Имя, Год, Длина, Сводка)
  2. «Жанр», который представляет собой список жанров (GenreID, Genre)
  3. «MovieGenre», который представляет собой список фильмов и их жанров.(MovieGenreID, GenreID, MovieID)
  4. «MovieRole», в котором хранятся имена актеров / режиссеров и т. Д. (MovieRoleID, Name)
  5. «MovieRoleType», в котором хранятся различные виды ролей дляфильм, как актер (MovieRoleTypeID, MovieRoleType)
  6. «В ролях», который представляет собой список актеров фильма (CastID, MovieRoleTypeID, MovieID, MovieRoleID)

При добавлении фильма выдолжен предоставить всю информацию о фильме, а также хотя бы одну роль в фильме (например, актер) и жанр.Должен ли я создать несколько SP и выполнить их с одного SP, или как мне это сделать?

ПРИМЕЧАНИЕ. Я не прошу вас писать весь SP для меня, просто требую указания.

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Я бы создал несколько отдельных хранимых процедур, а затем использовал бы транзакцию, чтобы убедиться, что вставки были зафиксированы вместе.

Вам понадобятся отдельные SP, чтобы добавить дополнительных участников, жанры и т. Д. Для меня не имеет большого смысла иметь один большой SP и весь код поддержки, который входит в вызов SP для добавления новый фильм + роль + жанр, а затем есть отдельные SP (и код поддержки) для дублирования добавления ролей и жанров. Использование транзакции эффективно объединит все ваши отдельные SP в одно действие, делая его почти похожим на один SP, но предоставляя вам гибкость в использовании отдельных SP.

Вам в любом случае понадобится код поддержки, чтобы звонить каждому из отдельных SP. Код, который будет проверять параметры, обрабатывать ошибки, устанавливать значения SP и т. Д. Таким образом, вам понадобятся такие функции, как AddRole, AddGenre и т. Д. В вашем приложении. Я предпочел бы иметь одну функцию в моем коде под названием AddMovie, которая запускает транзакцию, а затем вызывает каждую из этих отдельных функций. Разбейте работу на маленькие, легко тестируемые части, а затем создайте большие функции (AddMovie), вызывая меньшие части, которые, как вы знаете, работают. Было бы намного сложнее создать функцию AddMovie, которая вызвала бы другой SP, который в основном делает много тех же вещей, что и части, которые у вас уже есть.

1 голос
/ 07 марта 2012

Я бы создал sproc для каждой сущности, а затем, возможно, обернул бы их в отдельный SP под названием «AddNewMovie» или что-то в этом роде.

AddNewMovie просто вызовет других sprocs. Для дополнительного бонуса оберните их в транзакции.

Если вы не знакомы с транзакциями, у MSDN есть довольно хорошая статья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...