我打算为我的部门开发一个数据库模型。我发现很难建立学生,课程和员工之间的关系,因为任何数量的学生都可以选择任意数量的课程,任何数量的员工都可以处理任意数量的课程。我怎样才能在oracle数据库中表示这些数据?
答案 0 :(得分:0)
到目前为止,你做了什么?你遇到了什么样的困难?
无论如何:这是一个建议,看看是否有帮助。一个例子基于您的STUDENT和COURSES表。想法是包括映射课程和学生的附加“交叉”表,即包含制作两个表的主键的列,它们受外键约束的限制,并且它们都是新键的主键,交叉< / em> table。
以下是代码:
创建表格:
SQL> -- Students
SQL> create table t_student
2 (id_student number constraint pk_stu primary key,
3 student_name varchar2(20) not null
4 );
Table created.
SQL> -- Courses
SQL> create table t_course
2 (id_course number constraint pk_cou primary key,
3 course_name varchar2(20) not null
4 );
Table created.
SQL> -- Additional "cross" table
SQL> create table t_stu_x_cou
2 (id_student number constraint fk_sxc_stu
3 references t_student (id_student),
4 id_course number constraint fk_sxc_cou
5 references t_course (id_course),
6 constraint pk_sxc primary key (id_student, id_course)
7 );
Table created.
插入样本数据:
SQL> insert into t_student (id_student, student_name)
2 select 1, 'Little' from dual union
3 select 2, 'Foot' from dual;
2 rows created.
SQL> insert into t_course (id_course, course_name)
2 select 100, 'Mathematics' from dual union
3 select 200, 'Physics' from dual union
4 select 300, 'Chemistry' from dual;
3 rows created.
SQL> -- Mapping students and courses:
SQL> -- - student 1 takes 2 courses (100 and 300)
SQL> -- - student 2 takes 3 courses (100, 200 and 300)
SQL> insert into t_stu_x_cou (id_student, id_course)
2 select 1, 100 from dual union
3 select 1, 300 from dual union
4 --
5 select 2, 100 from dual union
6 select 2, 200 from dual union
7 select 2, 300 from dual;
5 rows created.
选择显示学生1的课程:
SQL> select s.student_name, c.course_name
2 from t_stu_x_cou x
3 join t_student s on s.id_student = x.id_student
4 join t_course c on c.id_course = x.id_course
5 where s.id_student = 1;
STUDENT_NAME COURSE_NAME
-------------------- --------------------
Little Mathematics
Little Chemistry
SQL>
现在,尝试使用相同的原则自己添加STAFF表(您将在STAFF和COURSES之间添加一个新的“交叉”表)。