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