質問

私は以前この質問をしたが、答えは私が探していたものではありませんでした。

私は、コードを使用せずにAsp.netでテーブルを作成しました。これには2つの列が含まれています。

YourUserIdとFriendUserId

これは、多くの関係に多くのです。

相続人は、私が欲しいもの:

ユーザーIDとして自分の名前を持つ複数のレコードが存在することができ、またFriendUserIdが同じであることで複数のレコードがあることができます...しかし、両方が同じであることで複数のレコードが存在することはできません。たとえばます:

デイブ:グレッグ

デイブ:クリス

グレッグ:クリス

クリス:グレッグ

良いです。

デイブ:グレッグ

デイブ:グレッグ

良いではありません。

私は右の表をクリックし、インデックス/キーを選択しました。私は、列のセクションで両方の列を入れて、独自のを作ることにしました。私は、これは彼らが全体としてユニークしかし、個別にユニークでなくなると思っています。

あなたがデータセットに行けば、

、それは次の両方の列のキーを示し、両方の列がチェックされているとの制約があることを述べています。

ちょうどあなたが個々の列が一意であることのないテーブルにレコードの複製コピーを挿入されていないことを確認することの方法はありますか?

私は私のSQL INSERT文でそれをcontroling試してみましたが、それは動作しませんでした。これは私が試したものです。

が存在しませWHERE([ユーザーID]を選択し、[FriendUserId] [FriendRequests] FROM)( ' "+ PossibleFriend +"' "+ユーザーID +" ')[FriendRequests]([ユーザーID]、[FriendUserId])値にINSERT

これは、何らかの理由で動作しませんでした。 あなたの助けをありがとう!

役に立ちましたか?

解決

あなたは重複行を防ぐために、複合主キーを作成する必要があります。

ALTER TABLE FriendRequests
ADD CONSTRAINT pk_FriendRequests PRIMARY KEY (UserID, FriendUserID)

またはテーブルデザイナーやキーとして設定するには、右クリックで両方の列を選択します。

自己友情を防ぐために、あなたはCHECK制約を作成したい:

ALTER TABLE FriendRequests
ADD CONSTRAINT ck_FriendRequests_NoSelfFriends CHECK (UserID <> FriendUserID)

あなたは「追加」をクリックし、「制約の確認」をクリックし、UserID <> FriendUserIDする式を設定し、テーブルデザイナで任意の場所を右クリックして、デザイナーにチェック制約を追加することができます。

あなたはこの質問する

他のヒント

あなたは両方のフィールドに単一のキーを作るために複合キーを必要とするように

が鳴ります。

私はより良いアイデアを持っています。新しいテーブルを作成します。呼び出されFriendRequestRelationships。次の列があります。

FriendRelationshipId(PRIMARY KEY) UserId_1(FOREIGN KEY制約) UserId_2(外部キー制約)

一つだけの関係のウィットUserId_1とUserId_2を許可するようにユニーク制約を置きます。このテーブルには、今お使いの多対多の関係ハーネスとなっています。

ユーザーIDのためFriendUserIdを返すことができますスカラー関数を作成し、それはfn_GetFriendUserIdForUserId

と呼ばれています言うことができます

これで、次のクエリを実行して、あなたの関係を表示することができます。

'Friend1' としてdbo.fn_GetFriendUserIdForUserId(UserId_1)を選択し、        dbo.fn_GetFriendUserIdForUserId 'Friend2' AS(UserId_2)、 FriendRelationshipId FROM

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top