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


8

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

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

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

  • OrderID
  • ユーザー名

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

しかし、SQL Serverでは、主キー以外の列に関係を作成できません。ユーザーテーブルを変更せずにカスケード更新/削除機能を取得して、UserNameをUserIDではなく主キーにする方法はありますか?

回答:


13

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

あなたの声明

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

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


1
あなたは正しいです、私のステートメントは、リレーションシップを作成しようとしたときにSQLサーバーから受け取ったエラーメッセージに基づいていました。
Shrage Smilowi​​tz、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.