Problems defining a primary key !!

Started by Nagib Abi Fadelover 22 years ago3 messagesgeneral
Jump to latest
#1Nagib Abi Fadel
nagib_postgres@yahoo.com

Hi ,
i'm doing the planification of the courses in a university.
I have definned the following tables:

1- Table DAY representing a day (day_id,year,month ...)
2- Table PERIODE representing an hour of a day (periode_id,starting,ending,periode_number)
3- Table TEACHER representing a teacher (teacher_id,name,phone,address ...)
4- Table ROOM representing a ROOM in the university (room_id,description,name ...)
5- Table COURSE representing a course given by a teacher (course_id,name,...)

Now i have to planify the courses:
So i created the
following table PLANIFY(day_id,periode_id,teacher_id,room_id,course_id)

THE PROBLEM IS THAT I DON'T HAVE A WAY TO DEFINE A PRIMARY KEY for the table PLANIFY.
We must note that:
1- a teacher can not give 2 courses in the same peiode on the same day, and can not exist in 2 different rooms in the same periode on the same day.
2- a room can not be occupied by 2 courses or 2 teachers in the same periode on the same day.
3- a course can not be given by 2 teachers or in 2 different rooms

ANY IDEAS ??

SHOULD I CHANGE THE STRUCTURE OF THE TABLE OR DEFINE A TRIGGER (which i don't know how to by the way).

thx for any help.

---------------------------------
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search

#2Karsten Hilbert
Karsten.Hilbert@gmx.net
In reply to: Nagib Abi Fadel (#1)
Re: Problems defining a primary key !!

1- Table DAY representing a day (day_id,year,month ...)
2- Table PERIODE representing an hour of a day (periode_id,starting,ending,periode_number)
3- Table TEACHER representing a teacher (teacher_id,name,phone,address ...)
4- Table ROOM representing a ROOM in the university (room_id,description,name ...)
5- Table COURSE representing a course given by a teacher (course_id,name,...)

following table PLANIFY(day_id,periode_id,teacher_id,room_id,course_id)

THE PROBLEM IS THAT I DON'T HAVE A WAY TO DEFINE A PRIMARY KEY for the table PLANIFY.

You can always define your own primary key with the SERIAL
datatype.

We must note that:
1- a teacher can not give 2 courses in the same peiode on the same day, and can not exist in 2 different rooms in the same periode on the same day.

unique (periode_id, day_id, teacher_id, course_id)
unique (periode_id, day_id, teacher_id, room_id)

2- a room can not be occupied by 2 courses or 2 teachers in the same periode on the same day.

unique (periode_id, day_id, room_id, course_id)
unique (periode_id, day_id, room_id, teacher_id) (redundant, see above)

3- a course can not be given by 2 teachers or in 2 different rooms

unique (course_id, teacher_id)
unique (course_id, room_id)

Does that help ?

Karsten
--
GPG key ID E4071346 @ wwwkeys.pgp.net
E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346

#3Richard Huxton
dev@archonet.com
In reply to: Nagib Abi Fadel (#1)
Re: Problems defining a primary key !!

On Tuesday 07 October 2003 11:38, Nagib Abi Fadel wrote:

Hi ,
i'm doing the planification of the courses in a university.
I have definned the following tables:

1- Table DAY representing a day (day_id,year,month ...)
2- Table PERIODE representing an hour of a day
(periode_id,starting,ending,periode_number) 3- Table TEACHER representing a
teacher (teacher_id,name,phone,address ...) 4- Table ROOM representing a
ROOM in the university (room_id,description,name ...) 5- Table COURSE
representing a course given by a teacher (course_id,name,...)

Now i have to planify the courses:
So i created the
following table PLANIFY(day_id,periode_id,teacher_id,room_id,course_id)

THE PROBLEM IS THAT I DON'T HAVE A WAY TO DEFINE A PRIMARY KEY for the
table PLANIFY. We must note that:

You do (day,period,teacher), but you'll need UNIQUE constraints on
day,period,room and day,period,course too.

Alternatively, two tables (*=primary key)

t1 (day*, period*, teacher*, course)
t2 (day*, period*, course*, room)

You could pick different combinations of p,t,c depending on your model.
--
Richard Huxton
Archonet Ltd