2011-08-24 60 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,我注意到在employee table了解为什么外键引用主键在同一个表中?

emp_id is primary key 

,并在同一个表

emp_idsuperior_emp_id which is a foreign key引用创建外键,其在同一个表为什么主键引用这样的数据库设计可以帮助我吗?

+0

上级也是员工。所以emp_id = 2的上级可能是emp_id = 1;基本上与同一个表中的行有1:1的关系。 – Andomar

+2

1到n实际上。一个上级可以有许多下属。 – Mchl

回答

8

这就是你将如何创建一个层次结构, 将确保你不能有一个没有父母的孩子 也可以确保你不能有一个孩子与一个无效的父母。

Should you make a self-referencing table column a foreign key?

+0

对不起,应该说“还可以确保你不能有一个孩子有一个无效的父母”(关于参照完整性本身的想法而不是这个具体情况) – Treborbob

+0

“这就是你将如何创建一个层次结构” - 我同意它*应该*是一个层次结构,但它不是一棵树吗? – onedaywhen

+0

@onedaywhen - 你为什么认为树不是一个层次结构? – MatBailie

6

见它应该指出的empolyee在这个例子中大老板是你的老板有一个优越的

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

,而他自己也有比他没有老板。

+4

他的父母对他的未来就业状况进行了真实的猜测,因为他给了他一个名字! :) – Jacob

+0

我很想把我的名字写在那里...... – Mchl

相关问题