복붙노트

[SQL] 외래 키는 기본 키의 역할을 할 수 있습니까?

SQL

외래 키는 기본 키의 역할을 할 수 있습니까?

나는 현재 우리 팀의 프로젝트에 대한 데이터베이스 구조를 설계하고있다. 그것이 가능 다른 테이블에 기본 키와 외부 키 행동을 가지고 : 나는 현재 염두에 아주 질문이?

여기에 우리의 시스템의 데이터베이스 설계의 테이블 중 일부입니다 :

user_accounts
students
guidance_counselors

내가 일이하고 싶어하면 user_accounts 테이블이 ID를 (시스템에 가정으로 로그인 자격 증명) 두 학생 사용자와 상담 교사와 사용자의 암호를 포함해야한다는 것입니다. 즉, 학생들과 guidance_counselors 테이블 모두의 기본 키도 user_accounts 테이블에서 외래 키입니다. 이 허용되는 경우 그러나 나는 확실하지 않다.

또 다른 질문은 : student_rec 표는 또한 각 레코드에 대한 student_number합니다 (user_accounts 테이블의 USER_ID가)와 (또한 user_accounts의 USER_ID 임) guidance_counsellor_id을 필요로하는 존재한다. 학생 및지도 교사의 모두 ID가 user_accounts 테이블에서 온다면, 내가 어떻게 student_rec 테이블을 디자인 할 것인가? 그리고 향후의 참조를 위해 어떻게 수동으로 SQL 코드로 작성하려면 어떻게해야합니까?

이 날을 도청하고있다 그리고 나는 나의 질문에 특정 또는 확인 답을 찾을 수 없습니다.

해결법

  1. ==============================

    1.물론이야. 이 테이블을 supertyping로 알려진 일반적인 기술이다. 귀하의 예와 같이, 아이디어는 하나 개의 테이블은 엔티티의 상위 집합을 포함하고 일반 엔티티를 설명하는 공통 속성을 가지고 있으며, 다른 테이블의 특정 속성을 가진 이들 개체의 하위 집합을 포함하고 있다는 점이다. 그것은 객체 지향 설계에서 간단한 클래스 계층 구조와는 달리이 아니다.

    물론이야. 이 테이블을 supertyping로 알려진 일반적인 기술이다. 귀하의 예와 같이, 아이디어는 하나 개의 테이블은 엔티티의 상위 집합을 포함하고 일반 엔티티를 설명하는 공통 속성을 가지고 있으며, 다른 테이블의 특정 속성을 가진 이들 개체의 하위 집합을 포함하고 있다는 점이다. 그것은 객체 지향 설계에서 간단한 클래스 계층 구조와는 달리이 아니다.

    두 번째 질문의 경우, 하나 개의 테이블은 별도로 같은 다른 테이블에 대한 외래 키 두 열을 가질 수 있습니다. 데이터베이스가 쿼리를 빌드 할 때, 두 번 다른 테이블을 조인. 데이터를 선택하면 SQL 쿼리에 설명하기 위해 (이 특별히 MS SQL 구문, 그래서 확실하지 MySQL의 구문에 대해, 나는 오랫동안 그것을 사용하지 않은 경우), 해당 테이블을 두 가지 별칭을 줄 것입니다. 이 같은:

    SELECT
        student_accounts.name AS student_name,
        counselor_accounts.name AS counselor_name
    FROM
        student_rec
        INNER JOIN user_accounts AS student_accounts
          ON student_rec.student_number = student_accounts.user_id
        INNER JOIN user_accounts AS counselor_accounts
          ON student_rec.guidance_counselor_id = counselor_accounts.user_id
    

    이것은 본질적으로 한 번 각 열을 두 번 user_accounts 테이블과 student_rec 테이블 및 콤바인을 받아, 양수인 두 개의 서로 다른 별칭 떨어져 그들에게하도록 그들을 결합 할 때.

  2. ==============================

    2.네, 아무 문제가 없어야합니다. 외부 키와 기본 키가 서로 직교, 열 또는 열 집합에 대한 그것의 벌금 차 (고유 할 것을 요구) 해당 테이블에 대한 키도 기본 키 / 고유 제한 조건과 연관 될 수있는 양이 될 수 있습니다 다른 테이블이다.

    네, 아무 문제가 없어야합니다. 외부 키와 기본 키가 서로 직교, 열 또는 열 집합에 대한 그것의 벌금 차 (고유 할 것을 요구) 해당 테이블에 대한 키도 기본 키 / 고유 제한 조건과 연관 될 수있는 양이 될 수 있습니다 다른 테이블이다.

  3. from https://stackoverflow.com/questions/17636106/can-a-foreign-key-act-as-a-primary-key by cc-by-sa and MIT license