Ensure integrity of other columns from foreign record I have 3 tables:

Race
 - id PK

Racer
 - id PK
 - rank

Winner
 - id PK
 - race_id FK(Race.id)
 - racer_id FK(Racer.id)
 - rank
 - prize
 UNIQUE CONSTRAINT (race_id, rank)


Racer.rank is a non-unique values, as some players can tie to a rank. I try to have records in Winner to have its rank match the Racer.rank that it references to. The unique constraint is to ensure that each race has only one 1st place.

The integrity between Winner.rank and Racer.rank is to enforcing if we later update Racer.rank, we will have to update the value in Winner as well, or remove that Winner row. How can I enforce that matching?

Other separate question:
- Is there a keyword that describe what I try to accomplish? I try to search with "referential integrity", "foreign constraint non-unique"... but none gets me to satified result.
Here is a rough sketch of the comments:

CREATE TABLE Race
( Race_id INT NOT NULL PRIMARY KEY  -- I prefer to use the same name through out the model
);

CREATE TABLE Racer
( Racer_id INT NOT NULL PRIMARY KEY  -- See above
, Rank INT NOT NULL
,   CONSTRAINT AK1_Racer UNIQUE (Rank, Racer_id) -- Super key
);

CREATE TABLE Result  -- Is not "Result" a better name than Winner?
-- I removed id
( Race_id INT NOT NULL
, Racer_id INT NOT NULL
, Rank INT NOT NULL  -- See below
, ...   
,   CONSTRAINT PK_Result PRIMARY KEY (Race_id, Racer_id)
,   CONSTRAINT AK_Result UNIQUE (Race_id, Rank)
,   CONSTRAINT FK_Race FOREIGN KEY (Race_id)
                       REFERENCES Race (Race_id)
,   CONSTRAINT FK_Racer FOREIGN KEY (Rank, Racer_id)
                       REFERENCES Racer (Rank, Race_id)
);


EDIT:

I'm not sure why RANK is part of RACER. It seems like all kinds of possible ranks can be derived from WINNER (RESULT):

SELECT Racer_id
     , COUNT(1) as #races
     , AVG(Rank) as avg_rank
     , MIN(Rank) as lowest_rank
     , MAX(Rank) as highest_rank
     , ...
FROM Result -- Winner
GROUP BY Racer_id


If there is some other metric like score, time, etc that determines the rank per race, you may also consider storing that and derive rank from there. PostgreSQL and newer versions of MySQL have window functions like RANK() that is very useful for such calculations.