【问题标题】:Stored procedure for adding a movie添加电影的存储过程
【发布时间】:2012-03-07 18:28:41
【问题描述】:
我准备创建一个用于添加电影的存储过程(我正在开发一个应用程序来存储和列出带有信息的电影),在开始之前,我想了解一下如何创建它。
我有以下表格:
- “电影”(电影 ID、名称、年份、长度、摘要)
- “Genre”,即流派列表(GenreID、Genre)
- “MovieGenre”,这是电影及其流派的列表。 (MovieGenreID、GenreID、MovieID)
- “MovieRole”,存储演员/导演的姓名等(MovieRoleID、Name)
- “MovieRoleType”,存储电影的不同类型的角色,如演员(MovieRoleTypeID、MovieRoleType)
- “Cast”,这是电影演员的列表(CastID、MovieRoleTypeID、MovieID、MovieRoleID)
添加电影时,您必须提供有关电影的所有信息,以及至少一个电影角色(例如演员)和类型。我应该创建几个 SP:s 并从一个 SP 执行它们,还是应该怎么做?
注意:我并不是要你为我编写整个 SP,只是要求一些指导。
提前致谢!
【问题讨论】:
标签:
sql
stored-procedures
【解决方案1】:
我会创建几个单独的存储过程,然后使用事务来确保插入一起提交。
您将需要单独的 SP 来添加额外的演员、流派等。拥有一个大型 SP 以及调用 SP 添加的所有支持代码对我来说没有多大意义一部新电影 + 角色 + 类型,然后有单独的 SP(和支持代码)来复制角色和类型的添加。使用事务将有效地将所有单独的 SP 包装到单个操作中,使其看起来几乎像单个 SP,但也使您可以灵活地使用各个 SP。
无论如何,您都需要支持代码来调用每个单独的 SP。将验证参数、处理错误、设置 SP 值等的代码。因此,您的应用程序中将需要 AddRole、AddGenre 等函数。我宁愿在我的代码中有一个名为 AddMovie 的函数,它启动一个事务,然后调用这些单独的函数中的每一个。将工作分解为易于测试的小块,然后通过调用您知道工作的较小部分来构建较大的函数 (AddMovie)。构建一个调用不同 SP 的 AddMovie 函数会复杂得多,该 SP 基本上可以完成许多与您已经拥有的部分相同的事情。
【解决方案2】:
我会为每个实体创建一个存储过程,然后可能将它们包装在一个名为“AddNewMovie”的单独 SP 中。
AddNewMovie 只会调用其他存储过程。为了获得额外奖励,请将它们包装在交易中。
如果你不熟悉事务,MSDN 有一个pretty good article