복붙노트

[SQL] 여러 테이블에서 기본 키를 참조 외래 키?

SQL

여러 테이블에서 기본 키를 참조 외래 키?

나는 두 테이블 데이터베이스 직원에 따라, 즉 employees_ce 및 employees_sn에 있습니다.

둘은 각각의 고유 한 기본 키 열을 가지고있다.

나는 누구의 외래 키 컬럼 나뿐만 아니라 employees_sn로 employees_ce의 기본 키를 참조하려는 다른 테이블라고 공제를 가지고있다. 이것이 가능한가?

예를 들면

employees_ce
--------------
empid   name
khce1   prince

employees_sn
----------------
empid   name
khsn1   princess

그래서이 가능할까요?

deductions
--------------
id      name
khce1   gold
khsn1   silver

해결법

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

    1.내가 제대로 시나리오 이해한다고 가정하면, 이것은 내가이 작업을 수행 할 수있는 올바른 방법을 부를 것이다 것입니다 :

    내가 제대로 시나리오 이해한다고 가정하면, 이것은 내가이 작업을 수행 할 수있는 올바른 방법을 부를 것이다 것입니다 :

    데이터베이스의 더 높은 수준의 설명에서 시작! 당신은 직원이, 직원은 "CE"직원들과 (그가 무엇이든) "SN"직원이 될 수 있습니다. 객체 지향 관점에서, "CE 직원"와 "SN 직원"라는 두 개의 하위 클래스와 클래스 "직원"가있다.

    직원, employees_ce 및 employees_sn : 그럼 당신은 세 개의 테이블이 더 높은 수준의 설명을 번역 :

    모든 직원이 직원 (대만족!)이기 때문에, 모든 직원은 직원 테이블의 행이있을 것이다. "CE"직원도 employees_ce 테이블의 행이 있고, "SN"직원도 employees_sn 테이블의 행이있다. employees_ce.id는 employees_sn.id 인 것처럼 employees.id에 대한 하나의 foreign 키이다.

    모든 종류의 (CE 또는 SN)의 직원을 참조하기 위해, 직원 테이블을 참조하십시오. 즉, 당신이 문제가 있었다 외래 키는 테이블을 참조해야합니다!

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

    2.(: 나는 그것을 시도 적이 정직), 그러나 다음 두 테이블의 부모 행의 존재를 주장하는 것 당신은 아마 두 개의 외래 키 제약 조건을 추가 할 수 있습니다.

    (: 나는 그것을 시도 적이 정직), 그러나 다음 두 테이블의 부모 행의 존재를 주장하는 것 당신은 아마 두 개의 외래 키 제약 조건을 추가 할 수 있습니다.

    대신 당신은 아마 대신이 외부 키를 당신이 개 직원 아형에 대한 슈퍼를 만든 다음 가리 키도록합니다. (물론, 당신은 직원의 두 가지 유형을 나눌 수있는 좋은 이유가 가정).

                     employee       
    employees_ce     ————————       employees_sn
    ————————————     type           ————————————
    empid —————————> empid <——————— empid
    name               /|\          name
                        |  
                        |  
          deductions    |  
          ——————————    |  
          empid ————————+  
          name
    

    CE 또는 SN을 것 직원 테이블에 입력합니다.

  3. ==============================

    3.사실 나는이 나 자신을. 나는 3 개 다른 테이블의 레코드에 대한 의견을 포함하고 '댓글'라는 테이블이 있습니다. 어느 솔루션은 실제로 당신이 아마가 원하는 모든 것을 처리합니다. 귀하의 경우, 당신은이 작업을 수행 할 것입니다 :

    사실 나는이 나 자신을. 나는 3 개 다른 테이블의 레코드에 대한 의견을 포함하고 '댓글'라는 테이블이 있습니다. 어느 솔루션은 실제로 당신이 아마가 원하는 모든 것을 처리합니다. 귀하의 경우, 당신은이 작업을 수행 할 것입니다 :

    해결 방법 1 :

    해결 방법 2 : 이 솔루션은 참조 무결성을 유지 할 수 있습니다 : '공제'테이블에 두 번째 외래 키 필드 만들기 1. 모두 외부 키에 널 (null) 값을 허용하고, 일반 외래 키를 만듭니다

        employees_ce
        --------------
        empid   name
        khce1   prince 
    
        employees_sn
        ----------------
        empid   name     
        khsn1   princess 
    
        deductions
        ----------------------
        idce    idsn      name  
        khce1   *NULL*    gold
        *NULL*  khsn1     silver         
    

    열이 null가 아닌 경우 참조 무결성을 유지할 수 있습니다 무결성 만 확인됩니다.

  4. ==============================

    4.나는이 긴 정체 주제 알고 있지만 경우 사람 검색에 여기에 내가 멀티 테이블 외래 키를 처리하는 방법입니다. 당신이 어떤 DBA 시행 캐스케이드 작업이없는이 기술을, 그래서 당신이 코드에서 DELETE 및 처리 확인하십시오.

    나는이 긴 정체 주제 알고 있지만 경우 사람 검색에 여기에 내가 멀티 테이블 외래 키를 처리하는 방법입니다. 당신이 어떤 DBA 시행 캐스케이드 작업이없는이 기술을, 그래서 당신이 코드에서 DELETE 및 처리 확인하십시오.

    Table 1 Fruit
    pk_fruitid, name
    1, apple
    2, pear
    
    Table 2 Meat
    Pk_meatid, name
    1, beef
    2, chicken
    
    Table 3 Entity's
    PK_entityid, anme
    1, fruit
    2, meat
    3, desert
    
    Table 4 Basket (Table using fk_s)
    PK_basketid, fk_entityid, pseudo_entityrow
    1, 2, 2 (Chicken - entity denotes meat table, pseudokey denotes row in indictaed table)
    2, 1, 1 (Apple)
    3, 1, 2 (pear)
    4, 3, 1 (cheesecake)
    

    SO 연산의 예는 다음과 같이 보일 것이다

    deductions
    --------------
    type    id      name
    1      khce1   gold
    2      khsn1   silver
    
    types
    ---------------------
    1 employees_ce
    2 employees_sn
    
  5. ==============================

    5.기술적으로 가능합니다. 당신은 아마 공제 및 employees_sn에 employees_ce를 참조 할 것. 그런데 왜 당신은 employees_sn 및 employees_ce을 병합하지? 나는 당신이 두 개의 테이블이 이유가 없습니다. 많은 관계에 아무도 없습니다. 그리고 많은 열 (안이 예에서).

    기술적으로 가능합니다. 당신은 아마 공제 및 employees_sn에 employees_ce를 참조 할 것. 그런데 왜 당신은 employees_sn 및 employees_ce을 병합하지? 나는 당신이 두 개의 테이블이 이유가 없습니다. 많은 관계에 아무도 없습니다. 그리고 많은 열 (안이 예에서).

    하나 열에 대한 두 개의 참조를 할 경우, 직원이 두 테이블에 항목이 있어야합니다.

  6. ==============================

    6.네, 가능합니다. 당신은 3 테이블 2 FKS을 정의해야합니다. 하나 개의 테이블 (즉, 1 FK 당 외부 테이블)의 각 FK 필요한 필드를 가리키는 (들).

    네, 가능합니다. 당신은 3 테이블 2 FKS을 정의해야합니다. 하나 개의 테이블 (즉, 1 FK 당 외부 테이블)의 각 FK 필요한 필드를 가리키는 (들).

  7. ==============================

    7.나는 vmarquez의 대답에 확장, 당신은 어떤 이유로 두 직원 유형에 대한 두 개의 테이블이 있어야합니다 가정 :

    나는 vmarquez의 대답에 확장, 당신은 어떤 이유로 두 직원 유형에 대한 두 개의 테이블이 있어야합니다 가정 :

    개요:

    employees_ce (id, name)
    employees_sn (id, name)
    deductions (id, parentId, parentType, name)
    

    공제의 데이터 :

    deductions table
    id      parentId      parentType      name
    1       1             ce              gold
    2       1             sn              silver
    3       2             sn              wood
    ...
    

    이것은 당신이 스키마의 다른 테이블에 공제 포인트를 가질 수 있도록한다. 확실 앱 (같은 데이터베이스를 치는 여러 가지 앱 / ​​서비스를 가지고 있다면 더 복잡하게하는) 제대로 제약 조건을 관리하게해야합니다 때문에 관계의이 종류는 데이터베이스 수준의 제약, IIRC 지원하지 않습니다.

  8. from https://stackoverflow.com/questions/668921/foreign-key-referring-to-primary-keys-across-multiple-tables by cc-by-sa and MIT license