表形式の情報を表示し、ユーザーがそれを入力および編集できるようにするアプリケーションがあります。このためのデータベース設計に取り組んでおり、次の問題に遭遇しました。
アプリケーション内のテーブルごとに MSSQL テーブルを作成することは避けたいので、すべてのテーブルをまとめて 2 つのテーブルで表そうとしています。
主キーと列MyAppTable
を持つテーブルを定義しました。Id INTEGER
Name CHARACTER VARYING(255)
そこからMyAppColumn
、列に対する外部キーを持つテーブルを定義し、レンダリングされたテーブル内の位置を示す列MyAppTable.Id
も持っています。Position INTEGER
MyAppRow
最後に、列に対して外部キーがあり、MyAppColumn.Id
列を持つテーブルを定義しましたData BINARY(32)
。これは小さなファイルのテーブルなので、このデータ型が適しています。
MyAppColumn.Position
実際の問題は、列がそれぞれに対して一意であることを保証できないことMyAppTable
です。
通常の状況の例:
MyAppTable
Id
0でMyAppColumn
Id
0、0、0TableId
で_Position
_MyAppColumn
1、0、1Id
_TableId
_Position
_MyAppRow
ColumnId
0で、[Data
何か]MyAppRow
ColumnId
1、Data
[何か]でMyAppTable
Id
1でMyAppColumn
2、1、0 _Id
_TableId
_Position
MyAppRow
ColumnId
2、Data
[何か]で
データベースで不可能にしたい状況の例:
MyAppTable
Id
0でMyAppColumn
Id
0、0、0TableId
で_Position
_MyAppColumn
Id
1、0、0 _TableId
_Position
_
ご覧のとおり、列のペアを制約する何らかの方法が必要です。2 つの列TableId
とPosition
はそうである必要がありますUNIQUE
が、それが個別に行われた場合、2 つのテーブルが両方ともPosition
0 の列を持つことができないことを意味します。
Microsoft SQL Server 2012 でこれを達成するにはどうすればよいですか?