2011-08-24 3 views
3
create table employee 
(emp_id smallint unsigned not null auto_increment, 
    fname varchar(20) not null, 
    lname varchar(20) not null, 
    start_date date not null, 
    end_date date, 
    superior_emp_id smallint unsigned, 
    dept_id smallint unsigned, 
    title varchar(20), 
    assigned_branch_id smallint unsigned, 
    constraint fk_e_emp_id 
    foreign key (superior_emp_id) references employee (emp_id), 
    constraint fk_dept_id 
    foreign key (dept_id) references department (dept_id), 
    constraint fk_e_branch_id 
    foreign key (assigned_branch_id) references branch (branch_id), 
    constraint pk_employee primary key (emp_id) 
); 

나는이 Example을 공부하고 그리고 난 외국 키를 생성동일한 테이블의 기본 키에 대한 외래 키 참조 이유 이해?

emp_id is primary key 

과 같은 테이블

에서 emp_id-superior_emp_id which is a foreign key 참조 employee table에서 발견되는 같은 테이블 이유에 기본 키에 대한 참조 이러한 데이터베이스 설계는 어느 누구도 나를 도울 수 있습니까?

+0

우수한 직원도 직원입니다. 따라서 emp_id = 2에 대한 상급은 emp_id = 1 일 수 있습니다. 기본적으로 동일한 테이블의 행과 1 : 1 관계입니다. – Andomar

+2

1 to n 실제로. 한 상급자는 여러 부하를 가질 수 있습니다. – Mchl

답변

8

Thats 어떻게 계층 구조를 만들지, 은 부모가없는 자식을 가질 수 없다는 것을 보장합니다. 또한 잘못된 부모와 자식을 가질 수 없도록 할 수 있습니다.

가 empolyee 빅 보스가 당신의 상사 인이 예에서 우수한

emp_id, fname, lname, superior_emp_id 
---------------------- 
1, 'Big', 'Boss', null, 
2, 'Viswanathan', 'Iyer', 1 

을 가질 수 있음을 나타냅니다하기로했다 또한 Should you make a self-referencing table column a foreign key?

+0

미안하지만, "당신이 무효 한 부모와 자식을 가질 수 없다는 것을 보장 할 수 있어야한다"(이 특별한 경우와는 대조적으로 참조 무결성 그 자체에 관한) – Treborbob

+0

"어떻게 계층 구조를 만들겠습니까?"- 나는 그것이 * 위계되어야한다고 동의하지만 실제로는 나무가 아닌가? – onedaywhen

+0

@onedaywhen - 왜 나무가 계층 구조가 아니라고 생각합니까? – MatBailie

6

참조, 그는 자신이 그 위에 어떤 상사가 없습니다.

+4

그의 이름을 지을 때 그의 부모님은 그의 미래 취업 상태에 대해 정말로 좋은 추측을했습니다! :) – Jacob

+0

나는 내 이름을 거기에 넣으려고 유혹을 받았다. – Mchl

관련 문제