2009-04-02 11 views
1

私は以前この質問をしましたが、答えは私が探していたものではありませんでした。Asp.NetのユニークなレコードSQL

コードを使用せずにAsp.netでテーブルを作成しました。 2つの列があります。

YourUserIdとFriendUserId

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

相続人は、私が欲しいもの:ユーザーIDとして自分の名前を持つ複数のレコードが存在することができ

、またFriendUserIdが同じであることで複数のレコードがあることができます...しかし、両方が同じであることで複数のレコードがあることはできません。たとえば、次のように

デイブ:グレッグ

デイブ:クリス

グレッグ:クリス

クリス:グレッグ

デイブ:グレッグ

が良い

デイブです。グレッグ

は良くありません。

私はテーブルを右クリックし、インデックス/キーを選択しました。次に、両方の列を列セクションに配置し、一意にすることを選択しました。私は、これが全体としてはユニークではなく、個性的ではないと考えました。

データセットに行くと、両方の列の横にキーが表示され、両方の列がチェックされているという制約があると表示されます。

個々の列を一意にすることなく、レコードを重複してテーブルに挿入しないようにする方法はありますか?

私はSQLの挿入ステートメントでそれを制御しようとしましたが、うまくいきませんでした。これが私が試みたものです。 [UserId]、[FriendUserId] FROM [FriendRequests] FROM [FriendUserId] FROM [FriendRequests] FROM [FriendUserId] FROM [FriendRequests] )

これは何らかの理由で機能しませんでした。 ありがとうございます!

+0

問題の内容は不明です。複合キーを作成したようです。エラーが発生していますか?重複する行を挿入できますか? –

+0

既にこの質問をしている場合は、ボードを乱雑にするために新しい質問を作成するのではなく、人々が質問したので、元の質問を明確にしてください。 http://stackoverflow.com/questions/707767/sql-unique-record-not-column –

答えて

3

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

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

に式を設定するあなたは、私は良いアイデアを持っているthis question

+0

私はそのような方法でテーブルを作成しなかったので、コードなしでどのようにしますか?コードなしでテーブルを作成するのは悪い設計ですか? – user84786

+0

コードを使用してテーブルを変更することはできます。しかし、私が言ったように、テーブルデザイナーを開き、両方の列を選択し、右クリックしてキーとして設定します。 –

+0

私はあなたが答えを入力し終える前にコメントして申し訳ありません...ありがとう! – user84786

1

両方のフィールドを1つのキーにするには、複合キーが必要です。

0

で見たいと思うかもしれません。新しいテーブルを作成します。 FriendRequestRelationshipsが呼び出されました。次の列

FriendRelationshipId(PRIMARY KEY) UserId_1(FOREIGN KEY制約) UserId_2(FOREIGN KEY制約)

は一つだけの関係のウィットUserId_1とUserId_2できるようにユニーク制約を入れています。この表は、多対多リレーションシップハーネスとして機能します。

ユーザーIDのためFriendUserIdを返すことができますスカラー関数を作成し、あなたが今」として次のクエリ

SELECT dbo.fn_GetFriendUserIdForUserId(UserId_1)を実行することにより、あなたの関係を表示することができ、それがfn_GetFriendUserIdForUserId

と呼ばれています言うことができますFriend1 '、 dbo.fn_GetFriendUserIdForUserId(UserId_2)AS' Friend2 '、 FROM FriendRelationshipId

関連する問題