我在想出一个解决方案时遇到了一个问题,我认为该解决方案必须是任何写入数据库的人都可以解决的常见问题。我一直在想,我忽略了一个明显的解决方案,这就是为什么我在这里找不到合适的现有问题。
想象一下这样一种情况,您需要让用户创建一个带有“学生”的“班级”,并且为每个“学生”分配一本书或多本书。你有一个定义明确的层次结构,Class->Student->Book。
您有以下表格:
CREATE TABLE Classes (
ClassId int identity(1,1) primary key,
ClassName nvarchar(255)
)
CREATE TABLE Students (
StudentId int identity(1,1) primary key,
ClassId int,
StudentName nvarchar(255),
StudentImage image
)
CREATE TABLE StudentBooks (
StudentBookId int identity(1,1) primary key,
StudentId int,
BookName nvarchar(255)
)
在这种人为的场景中,我有哪些选项可以保存整个新对象图,同时让 SQL 服务器分配标识列,并将其全部保存在一个事务中?假设一个班级可能有 30 名学生,并且每个学生分配了几本书。
我可以创建一个事务并对每个表中的每一行进行单独调用,为每个新的父对象返回 SCOPE_IDENTITY,这样我就可以保存每个子对象,同时保持 RI 完好无损。
我可以使用 XML。我想避免这种情况,因为该图包含一个字节数组。
还有其他选择吗?我考虑过在表参数中传递层次结构的每一级。我不确定这将如何或是否会起作用。(我不是必须为每个表定义一个表类型,本质上是复制模式吗?)
我可以为此使用 SQL Server 2012。
谢谢!