私は、事前に選択された一連のデータベース テーブル (およびその関係) を使用して、それらのテーブル内のデータを管理するためのユーザー インターフェイスを生成する汎用アプリケーションに取り組んでいます。基本的には、情報スキーマから情報を検索し、主キーと外部キーをすべて取得し、それに基づいて入力フィールドと他のダイアログへのリンクを生成するだけです。これは一般的なソリューションであると想定されているため、相互に意味のある関係を持つ任意のテーブル セットで機能するはずです。
私が遭遇したことの 1 つは外部キー、特に 1 つの制約下の COMPOSITE 外部キーです。たとえば、次のテーブルがあるとします。
会社
CompanyID, CompanyName, CompanyID
--companyID is the primary key which identifies the company.
分割
DivisionID, CompanyID, DivisionName, DivisionID+CompanyID
--DivisionID+CompanyID is a composite primary key for a division, because it's a one-to-many relationship and division is DEPENDENT on Company.
チーム
TeamID, DivisionID, CompanyID, TeamName, TeamID+DivisionID+CompanyID
--same as above - a Team is dependent on Division, which has a composite primary key.
さて、このデータベース モデルは - すべての定義で - 有効なモデルです (そして SQL Server はそれを可能にします) - しかし、ある問題に遭遇しました。
たとえば、情報スキーマでは、DivisionID と CompanyID の両方が同じ CONSTRAINT に「割り当て」られます。したがって、正しいテーブルに参加すると、問題が発生します。一方のテーブルのどの列がもう一方のテーブルのどの列であるかを知る方法はありません。上記の例では、列名は同じです (CompanyID は、会社の ID に関連するすべての列の名前です - それは COMPANY テーブルまたは TEAM テーブルなどにあります...)。しかし、そのルールはありません。列の名前は同じでなければならないと言っているので、どの列がどれであるかを実際にプログラムに知らせる方法に途方に暮れています。
TABLE1 COLUMN1 CONSTRAINT TABLE2 COLUMN2
TEAM CompID TEAM_HAS_DIVISION DIVISION CompanyID
TEAM DivID TEAM_HAS_DIVISION DIVISION DivisionID
テーブル TEAM の CompID が、DIVISION テーブルの DivisionID ではなく、CompanyID を参照していることをコンピューターが認識する方法はありますか?
INFORMATION_SCHEMA ビューのデータからこれを行う方法が見つかりませんでした。
はい、人間はその CompID=CompanyID などを簡単に把握できます...しかし、前に述べたように、私は人がこれを見て決定や間違いをする必要のない一般的な解決策を作ろうとしています := )