문제

나는 이전 에이 질문을했지만 답은 내가 찾고 있던 것이 아니었다.

코드를 사용하지 않고 ASP.NET에서 테이블을 만들었습니다. 두 개의 열이 포함되어 있습니다.

youruserid와 frienduserid

이것은 많은 관계입니다.

그녀는 내가 원하는 것을 :

userID로 이름을 가진 여러 레코드가있을 수 있습니다. FriendUserId가 동일하게있는 여러 레코드가있을 수 있습니다. 그러나 둘 다 동일하게 여러 레코드가있을 수는 없습니다. 예를 들어:

데이브 : 그렉

데이브 : 크리스

그렉 : 크리스

Chris : Greg

좋다

데이브 : 그렉

데이브 : 그렉

좋지 않습니다.

테이블을 마우스 오른쪽 버튼으로 클릭하고 인덱스/키를 선택했습니다. 그런 다음 두 열을 열 섹션에 넣고 고유 한 것을 선택했습니다. 나는 이것이 전체적으로 독특하지만 개별적으로 독특하지 않다고 생각했다.

데이터 세트로 이동하면 두 열 옆에 키가 표시되며 두 열이 모두 확인되는 제약이 있다고합니다.

개별 열이 고유하지 않고 레코드의 복제본 사본을 테이블에 삽입하지 않도록하는 방법이 있습니까?

SQL Insert 문으로 제어를 시도했지만 작동하지 않았습니다. 이것이 내가 시도한 것입니다.

friendRequests] ([userId], [friendUserId]) 값 ( ' "+userId+"', ' "+oublyfriend+"')에 삽입하여 존재하지 않는 경우 ([userId], [friendRequests]에서 [friendRequests])

그것은 어떤 이유로 작동하지 않았습니다. 도와 주셔서 감사합니다!

도움이 되었습니까?

해결책

중복 행을 방지하기 위해 복합 기본 키를 만들어야합니다.

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

또는 테이블 디자이너의 두 열을 선택하고 마우스 오른쪽 버튼을 클릭하여 키로 설정하십시오.

자기 친구를 방지하기 위해 a CHECK 강제:

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

테이블 디자이너의 어느 곳에서나 마우스 오른쪽 버튼을 클릭하고 "제약 조건 확인"을 클릭하고 "추가"를 클릭하고 표현식을 설정하여 디자이너의 확인 제약 조건을 추가 할 수 있습니다. UserID <> FriendUserID

당신은보고 싶을 수도 있습니다 이 질문

다른 팁

두 필드를 단일 키로 만들려면 복합 키가 필요한 것 같습니다.

더 나은 아이디어가 있습니다. 새 테이블을 만듭니다. FriendRequestrelationships라고합니다. 다음 열이 있습니다

FriendRelationShipID (1 차 키) userId_1 (외국 키 제약) userId_2 (외국 키 제약 조건)

UserID_1과 UserID_2의 하나의 관계 만 허용하기 위해 고유 한 제약 조건을 제한하십시오. 이 테이블은 이제 여러분의 많은 관계 하네스 역할을합니다.

userID에 대해 friendUserid를 반환 할 수있는 스칼라 함수를 만듭니다.

이제 다음 쿼리를 실행하여 관계를 표시 할 수 있습니다.

dbo.fn_getfrienduseridforuserid (userId_1)로 'friend1', dbo.fn_getFriendUserIdforUserId (userId_2)로 'friend2', friendrelationshipid에서 선택하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top