2011-03-15 7 views
0

테이블에 userid 및 role id 필드가 있습니다. 이 테이블에서 커플 userid는 두 가지 역할을합니다. 하지만 그렇게해서는 안됩니다.중복 기록을 삭제 하시겠습니까?

예 :

Userid(FK) RoleID(FK) 
1    1E36A840-2EBB-44EC-8861-0E3D262AC676 
1    0B54F223-E0D4-4CFC-84C3-7C98C1BFC6DA 
2    1E36A840-2EBB-44EC-8861-0E3D262AC676 
3    0B54F223-E0D4-4CFC-84C3-7C98C1BFC6DA 
4    1E36A840-2EBB-44EC-8861-0E3D262AC676 
4    0B54F223-E0D4-4CFC-84C3-7C98C1BFC6DA 
I 1을 삭제해야 이때

4 어디 0B54F223-E0D4-4CFC-84C3-7C98C1BFC6DA '

있습니다'1E36A840-2EBB-44EC-8861-0E3D262AC676 '
+0

당신이 결정 어떻게하는 역할을 유지할 것인가? –

+0

사용자가 여러 역할을 가져야하는 이유는 무엇입니까? – David

+0

테이블의 PK는 무엇입니까? – Thomas

답변

0

Userid 열에 고유 제한 조건을 넣으면이 문제가 발생하지 않도록 할 수 있습니다. 그러나 이렇게하기 전에 기존 중복을 제거해야합니다. 우리가 지금까지 가지고있는 정보 (UseridRoleid)를 감안할 때 실제로 "올바르게"할 수있는 방법이 없습니다. @Joe Stefanelli가 자신의 의견에서 언급했듯이 각 사용자에게 어떤 역할이 "올바른"역할인지 결정해야합니다. 수동 프로세스처럼 들립니다. (각 경우에 첫 번째 만 유지해야한다는 것을 미리 알지 못한다면 @ 토마스는 좋은 대답을 가지고 있습니다.)

호기심에서 벗어난 이유는 무엇입니까? 이 경우에는 여러 역할을해야합니까?) 일반적으로 그것은 역할이 무엇이며, 여러 사용자에게 여러 권한 세트를 다 대다 방식으로 적용하는 것입니다. 객체 지향 디자인이라는 측면에서 생각해보십시오. 역할은 인터페이스 (유형)이며 사용자는 클래스 (구현)입니다. 여러 역할을 가짐으로써 각 사용자는 시스템 전체에서 여러 사용자 유형으로 다형성을 가질 수 있습니다.

0

SQL Server 2005를 사용하고 나중에 우리가 (이 예에서는 PKCol라고 함) 기본 키 열을 가정하고 역할 ID가 제거되는 중요하지 않습니다 가정합니다 가정 :

With Dups As 
    (
    Select PKCol 
     , Row_Number() Over(Partition By UserId Order By PKCol) As Num 
    From Table 
    ) 
Delete MyTable 
From MyTable As T1 
    Join Dups As T2 
     On T2.PKCol = T1.PKCol 
Where T2.Num > 1 
관련 문제