我有一个显示表格信息并允许用户输入和编辑它的应用程序。我一直在为此进行数据库设计,并遇到了以下问题。
我想避免为应用程序中的每个表创建一个 MSSQL 表,所以我一直试图在两个表中表示所有表。
我已经定义了一个MyAppTable
具有Id INTEGER
主键和Name CHARACTER VARYING(255)
列的表。
从那里,我定义了一个MyAppColumn
表,其中外键针对该MyAppTable.Id
列,并且还有一个Position INTEGER
列来指示其在呈现表中的位置。
最后,我定义了一个MyAppRow
表,其中针对该MyAppColumn.Id
列的外键并有一个Data BINARY(32)
列。这是一个小文件表,所以这种数据类型很合适。
实际的问题是我不能保证MyAppColumn.Position
每个MyAppTable
.
一个正常情况的例子:
MyAppTable
与Id
0MyAppColumn
与Id
0,TableId
0,Position
0MyAppColumn
有Id
1,TableId
0,Position
1MyAppRow
ColumnId
0,[Data
某事]MyAppRow
与ColumnId
1,Data
[某事]MyAppTable
有Id
1MyAppColumn
有Id
2,TableId
1,Position
0MyAppRow
与ColumnId
2,Data
[某事]
我想在数据库中使不可能的情况示例:
MyAppTable
与Id
0MyAppColumn
与Id
0,TableId
0,Position
0MyAppColumn
有Id
1,TableId
0,Position
0
如您所见,我想要某种方式来约束一对列。这两列应该是TableId
,但如果这是独立完成的,这将意味着两个表永远不会有列都为 0。Position
UNIQUE
Position
如何在 Microsoft SQL Server 2012 中完成此操作?