web-dev-qa-db-ja.com

SQL Serverで非主キーとの関係をどのように作成しますか?

私は、UserIDと呼ばれる主キーとUserNameと呼ばれる別の列の2つの列を持つUsersテーブルを持っています。

  • UserID(int)PK
  • ユーザー名(varchar(256)

どちらもユニークですが、他のテーブルでリファレンスとしてUserNameを使用する理由を考えました。たとえば、注文テーブルには、useridではなくUserNameによるuserへの参照があります。

  • OrderID
  • UserName

SQL Serverのカスケード更新/削除機能を利用できるように、UserNameとUsersテーブルを参照するすべてのテーブル間にリレーションシップを作成します。

しかし、SQL Serverでは、非主キー列に関係を作成できません。 UserNameが主キーであり、UserIDではないように、usersテーブルを変更せずにカスケード更新/削除機能を取得する方法はありますか?

8

UserNameに一意のインデックスまたは一意の制約を作成すると、FK制約でそれを細かく参照できます。

あなたの声明

SQL Serverでは、非主キー列に関係を作成できません

間違っています。 SQL Serverは、FK関係に参加している列に一意のインデックスが定義されていることのみを考慮します。

13
Martin Smith