sql >> データベース >  >> RDS >> Sqlserver

SQLServerで実際の1対1の関係を作成する方法

    SQL Serverでは、真の1対1の関係を持つことは技術的に不可能であると確信しています。これは、持っていることを意味します。 両方のテーブルで、両方のテーブルが互いに外部キー関係にある状態で、両方のレコードを同時に挿入するには(そうしないと、挿入時に制約エラーが発生します)。

    そうは言っても、外部キーで記述されたデータベース設計は1対0..1の関係です。 tableBのレコードを必要とするような制約はありません。 tableBにレコードを作成するトリガーとの疑似関係を持つことができます。

    したがって、いくつかの疑似ソリューションがあります

    まず、すべてのデータを1つのテーブルに保存します。そうすれば、EFで問題は発生しません。

    または次に、エンティティは、関連付けられたレコードがない限り挿入を許可しないように十分にスマートである必要があります。

    または、第3に、おそらく、解決しようとしている問題があり、解決しようとしている実際の問題(XY問題)ではなく、解決策が機能しない理由を尋ねています。

    更新

    REALITYで説明するには 1対1の関係が機能しない場合は、鶏が先か卵が先かというジレンマの例えを使用します。このジレンマを解決するつもりはありませんが、卵を卵テーブルに追加するために、鶏の関係が存在し、鶏がテーブルに存在する必要があるという制約がある場合は、 EggテーブルにEggを追加できませんでした。逆もまた真です。 EggとEggテーブルに存在するEggの両方との関係がなければ、ChickenテーブルにChickenを追加することはできません。したがって、ルール/制約の1つに違反することなく、データベース内ですべてのレコードを作成することはできません。

    データベース命名法 1対1の関係は誤解を招く恐れがあります。私が見たすべての関係(これまでの私の経験)は、1対(0または1)の関係としてより説明的です。



    1. WHERE vs HAVING

    2. ORACLEでVARCHARのXMLTYPEを変換するにはどうすればよいですか?

    3. MySQLサーバーのルートパスワードをリセットする

    4. MySQLドロップインデックス