[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.내가 제대로 시나리오 이해한다고 가정하면, 이것은 내가이 작업을 수행 할 수있는 올바른 방법을 부를 것이다 것입니다 :
내가 제대로 시나리오 이해한다고 가정하면, 이것은 내가이 작업을 수행 할 수있는 올바른 방법을 부를 것이다 것입니다 :
데이터베이스의 더 높은 수준의 설명에서 시작! 당신은 직원이, 직원은 "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.(: 나는 그것을 시도 적이 정직), 그러나 다음 두 테이블의 부모 행의 존재를 주장하는 것 당신은 아마 두 개의 외래 키 제약 조건을 추가 할 수 있습니다.
(: 나는 그것을 시도 적이 정직), 그러나 다음 두 테이블의 부모 행의 존재를 주장하는 것 당신은 아마 두 개의 외래 키 제약 조건을 추가 할 수 있습니다.
대신 당신은 아마 대신이 외부 키를 당신이 개 직원 아형에 대한 슈퍼를 만든 다음 가리 키도록합니다. (물론, 당신은 직원의 두 가지 유형을 나눌 수있는 좋은 이유가 가정).
employee employees_ce ———————— employees_sn ———————————— type ———————————— empid —————————> empid <——————— empid name /|\ name | | deductions | —————————— | empid ————————+ name
CE 또는 SN을 것 직원 테이블에 입력합니다.
-
==============================
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.나는이 긴 정체 주제 알고 있지만 경우 사람 검색에 여기에 내가 멀티 테이블 외래 키를 처리하는 방법입니다. 당신이 어떤 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.기술적으로 가능합니다. 당신은 아마 공제 및 employees_sn에 employees_ce를 참조 할 것. 그런데 왜 당신은 employees_sn 및 employees_ce을 병합하지? 나는 당신이 두 개의 테이블이 이유가 없습니다. 많은 관계에 아무도 없습니다. 그리고 많은 열 (안이 예에서).
기술적으로 가능합니다. 당신은 아마 공제 및 employees_sn에 employees_ce를 참조 할 것. 그런데 왜 당신은 employees_sn 및 employees_ce을 병합하지? 나는 당신이 두 개의 테이블이 이유가 없습니다. 많은 관계에 아무도 없습니다. 그리고 많은 열 (안이 예에서).
하나 열에 대한 두 개의 참조를 할 경우, 직원이 두 테이블에 항목이 있어야합니다.
-
==============================
6.네, 가능합니다. 당신은 3 테이블 2 FKS을 정의해야합니다. 하나 개의 테이블 (즉, 1 FK 당 외부 테이블)의 각 FK 필요한 필드를 가리키는 (들).
네, 가능합니다. 당신은 3 테이블 2 FKS을 정의해야합니다. 하나 개의 테이블 (즉, 1 FK 당 외부 테이블)의 각 FK 필요한 필드를 가리키는 (들).
-
==============================
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 지원하지 않습니다.
from https://stackoverflow.com/questions/668921/foreign-key-referring-to-primary-keys-across-multiple-tables by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL의 날짜 함수를 사용하여 가장 가까운 분에 가까운 시간을 반올림 (0) | 2020.03.28 |
---|---|
[SQL] SQL 날짜에서만 연도와 월을 얻기 (0) | 2020.03.28 |
[SQL] 사용자와 SQL Server에서 로그인의 차이 (0) | 2020.03.28 |
[SQL] SQL 서버에 대한 변수에 동적 SQL의 결과를 얻기 (0) | 2020.03.28 |
[SQL] MySQL의 쿼리는 지난 주에서 데이터를 선택하려면? (0) | 2020.03.28 |