Mic*_*ray 3 sql-server constraints sql-server-2012
我有一个显示表格信息的应用程序,允许用户输入和编辑它.我一直致力于数据库设计,并遇到了以下问题.
我想避免为应用程序中的每个表创建一个MSSQL表,所以我一直试图在两个表中一起表示所有表.
我已经定义了一个MyAppTable具有Id INTEGER主键和Name CHARACTER VARYING(255)列的表.
从那里,我已经定义了一个MyAppColumn表,该表对MyAppTable.Id列进行了外键,并且还有一个Position INTEGER列来指示它在渲染表中的位置.
最后,我已经定义了一个MyAppRow表,该表对着MyAppColumn.Id列有外键并且有一Data BINARY(32)列.它是一个小文件表,所以这种数据类型是合适的.
实际问题是我不能保证MyAppColumn.Position列对每个列都是唯一的MyAppTable.
正常情况的一个例子:
MyAppTable与Id0MyAppColumn用Id0,TableId0,Position0MyAppColumn与Id1,TableId0,Position1MyAppRow用ColumnId0,Data[东西]MyAppRow用ColumnId1,Data[东西]MyAppTable与Id1MyAppColumn与Id2,TableId1,Position0MyAppRow用ColumnId2,Data[东西]我希望在数据库中无法实现的情况示例:
MyAppTable与Id0MyAppColumn用Id0,TableId0,Position0MyAppColumn与Id1,TableId0,Position0如您所见,我想要一些约束一对列的方法.两列TableId,并Position应UNIQUE但如果是独立完成的,这将意味着两个表可以永远都在有列Position的0.
如何在Microsoft SQL Server 2012中完成此操作?
您的问题的解决方案是不对表中的元数据进行编码,而是创建实际的表,即使它不方便或需要大量工作.
有些东西很快会咬你的后方:
在将来节省大量的时间和精力,现在只需在设计阶段制作实际表格. 这种类型的元数据"神表"已经反复尝试过,从不起作用.
话虽这么说,如果你代表一组非常有限的数据(就像你说的那样,仅限于文件),我会考虑一个坐标系.
保持MyAppTable原样.
创建一个MyAppFile包含字段的表:
MyAppTableId (FK)Data (VARBINARY)XPos (INT)YPos (INT)有一个独特的约束(MyAppTableId, Xpos, Ypos).
这更准确地表示您要存储的内容,更易于维护,并允许您强制执行完整性.