0

이것은 바람직한 기능처럼 보이지만 외래 키가 기본 키 (복합 키)의 일부인 동안 어떻게 할 것인지 알 수없는 것처럼 보입니다. . 각각의 사용자와 각각의 액세스 레벨모든 레코드를 참조하는 외래 키 또는 접합 테이블에 레코드가 없음

Column | References 
user  user.id 
access access.id 

따라서있을 수 많은 항목이

테이블은 사용자가 액세스 할 수있는 User.idAccess.id 참조 함수를 참조하는 다수의 관계에 많은 간단한 접합 테이블이다. "수퍼 유저"를 단순화하기 위해 access에 대한 NULL 값을 갖고 싶었습니다. 이는 모든 페이지에 액세스 할 수 있음을 의미합니다 (access 테이블의 행을 참조하지 않는 값을 입력하는 방법을 설명하는 유일한 방법입니다).). 문제는 MySQL이 NULL 값을 기본 키의 일부로 허용하지 않는다는 것입니다.

기본 키가있는 NULL 문제와 관련된 문제가 있습니까? 아니면 외래 키의 모든 행 (또는 행 없음)을 참조 할 수있는 다른 방법이 있습니까? 다른 방법으로는 외래 키를 사용하지 않도록 설정하거나 테이블의 모든 access.id에 대한 행을 추가해야합니다. 둘 중 하나가 바람직하지 않습니다.

답변

0

아마도 사용자 테이블에 수퍼 유저 플래그가 있습니다. 각 수퍼 유저와 사용할 수있는 액세스 ID 세트에 대한 데카르트 조인을 필요한 모든 쿼리에 UNION 할 수 있습니다.

수행중인 작업에 따라 수퍼 유저의 액세스 권한을 데이터베이스에 저장하지 않고 코드에서 다르게 처리 할 수 ​​있습니다. 즉 SU로 설정하면 액세스 확인을 무시하십시오. 귀하의 응용 프로그램에 따라 다릅니다.

+0

감사합니다. 이 질문은 나를위한 연습만큼이나 많은 이론이므로 코드를 변경하거나 새 테이블을 추가하는 대신 접합 테이블 또는 관계 테이블의 디자인에서 수행 할 수있는 작업이 있는지 확인하려고합니다. – Devon

+0

새 테이블을 추가 할 필요없이 쿼리 만 변경하면됩니다. 물론 수퍼 유저 플래그가 없으면 모든 액세스 ID를 추가 할 수 있습니다. – LoztInSpace

0

NULL이 허용되며 user.id와 함께 고유 한 조합으로 사용할 수 있다고 생각합니다. 그러나 이것이 이것이 좋은 방법인지 확실하지 않습니다. 슈퍼 사용자 설정을 열에 저장하고 여기에서 코드에서 사용할 수 있습니다.

+0

고유 한 키가 효과적이지 않습니다. 이러한 유형의 관계는이 필드가 복합 키이고 문제가있는 곳입니다. – Devon

+0

고유 한 단어를 사용하여 유감스럽게 생각합니다. 나는 NULL이 주/복합 키의 값으로 허용된다는 것을 의미합니다. – Pradeep