Трудно express озаглавить вопрос, так как мне не хватает терминологии того, чего я хочу достичь, поэтому я напишу это с точным примером того, что я хочу сделать.
Имея эти таблицы:
Table market{
id integer [pk]
code varchar(32) [not null, unique]
name varchar(32) [not null]
}
Table outcome{
id integer [pk]
market integer [not null, ref: > market.id] # References market
code varchar(32) [not null, unique]
name varchar(32) [not null]
}
Table game{
id integer [pk]
match integer [not null, ref: > match.id] # References match
outcome integer [not null, ref: > outcome.id] # References outcome
odd float [not null]
status integer [not null, ref: > status.id]
won bool [null]
}
Как можно добавить уникальный ключ в таблицу game
, гарантируя, что только outcome
на market
на match
(«отношение прародителя») not null
значение?
Например
market table
-------------------+
id | code | name |
-------------------+
1 | vict | Victory|
1 | goal | Goals |
-------------------+
outcome table
------------------------------------+
id | market | code | name |
------------------------------------+
1 | 1 | home | Home |
2 | 1 | away | Away |
3 | 2 | one | One |
4 | 2 | two | Two |
5 | 3 | thmr | Three or More |
------------------------------------+
game table
-------------------------------------------+
id | match | outcome | odd | status | won |
-------------------------------------------+
1 | 1 | 1 | 1.2 | 1 | NULL |
2 | 1 | 2 | 2.5 | 1 | 1 | // OK
3 | 2 | 1 | 1.7 | 1 | 1 |
4 | 2 | 2 | 2.4 | 1 | 1 | // ERROR
-------------------------------------------+