В реляционных базах данных внешние ключи не проверяются транзитивно. Единственный способ убедиться, что FK хорошо связаны , как вы хотите, - это использовать составные ключи. Например:
CREATE TABLE table1 (
id INT NOT NULL PRIMARY KEY,
some_data VARCHAR(100) NOT NULL
)
CREATE TABLE table2 (
table1_id INT NOT NULL,
id INT NOT NULL,
some_data VARCHAR(30) NOT NULL,
PRIMARY KEY (table1, id), -- composite PK
CONSTRAINT fk_table2_table1 FOREIGN KEY (table1_id) REFERENCES table1(id)
)
CREATE TABLE table3 (
table1_id INT NOT NULL,
table2_id INT NOT NULL,
id INT NOT NULL PRIMARY KEY,
some_data VARCHAR(30) NOT NULL,
PRIMARY KEY (table1_id, table2_id, id), -- optional composite PK
CONSTRAINT fk_table3_table2 FOREIGN KEY (table1_id, table2_id)
REFERENCES table2 (table1_id, id) -- references table_2 composite PK
)