Re: Need a referential constraint to a non-unique record

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: Need a referential constraint to a non-unique record
Дата
Msg-id 37267c00-86b5-e17d-f667-99cb2968c2a9@aklaver.com
обсуждение исходный текст
Ответ на Need a referential constraint to a non-unique record  (David Gauthier <davegauthierpg@gmail.com>)
Список pgsql-general
On 6/25/19 2:58 PM, David Gauthier wrote:
> I need to create a constraint on a column of a table such that it's 
> value is found in another table but may not be unique in that other 
> table.  Example...
> 
> Let's say the DB is about students and the grades they got for 4 
> subjects... Math, English, Science, History.  But instead of creating 4 
> records in the "grades" table for every record in the "students" table, 

But you are.

> I storing each unique combination of grades in the "grades" table, those 
> records tied together with a common "id" field...
> 
> grade_id   subject      grade
> 1          math         A
> 1          english      A
> 1          science      A
> 1          history      A
> 2          math         B
> 2          english      A
> 2          science      C
> 2          history      B
> 
> etc...  Each unique combination of the 4 subject/grades gets a new "id" 
> and those 4 records are written to the grates table.

Why not?:

grade_id student_id   subject      grade
1       1          math         A
2          1          english      A
3          1          science      A
4          1          history      A
5          2          math         B
6          2          english      A
7          2          science      C
8          2          history      B

Where grade_id is the PK and student_id is FK to students

> 
> Now, in the "students" table I have a "grad_id" column which points to 
> the set of grades for that student.  The "grade_id" value in the 
> "students" table must also exist in the "grades" table.  But the 
> grade_id value is pointing to 4, not 1 record in the "grades" table.  
> And "grade_id" in the "grades" table can't (obviously) be a PK.
> 
> There are no primary keys in this scenario so I don't think I can set up 
> a traditional primary-foreign key relationship.
> 
> I could do this with a check constraint.  But I want the ER view in the 
> DBeaver tool to recognize the constraint and depict it.
> 
> I suppose I could create a bridge table between the "students" and 
> "grades" table which has only the "grades_id" column as a primary key, 
> and then set up 2 traditional primary/foreign key constraints (one 
> between this new table and "grades", and the other between this new 
> table and "students").  But it's kinda unnecessary and am looking for 
> something more direct, without the bridge.
> 
> Any ideas ?
> psql (9.6.7, server 9.5.2) on linux
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com



В списке pgsql-general по дате отправления:

Предыдущее
От: "David G. Johnston"
Дата:
Сообщение: Re: Need a referential constraint to a non-unique record
Следующее
От: Daulat Ram
Дата:
Сообщение: Max_connections limit