У меня есть таблица, первичный ключ которой упоминается в нескольких других таблицах как внешний ключ. Например:
CREATE TABLE 'user' (
'user_id' int NOT NULL auto_increment,
'name' varchar(255) NOT NULL,
PRIMARY KEY ('user_id')
)
CREATE TABLE 'customer' (
'customer_id' int(11) NOT NULL auto_increment,
'name' varchar(255) NOT NULL,
'user_id' int NOT NULL,
PRIMARY KEY ('customer_id'),
CONSTRAINT 'user_id' FOREIGN KEY ('user_id') REFERENCES 'user' ('user_id')
)
CREATE TABLE 'product' (
'product_id' int(11) NOT NULL auto_increment,
'name' varchar(255) NOT NULL,
'customer_id' int NOT NULL,
'user_id' int NOT NULL,
PRIMARY KEY ('user_id'),
CONSTRAINT 'user_id' FOREIGN KEY ('user_id') REFERENCES 'user' ('user_id'),
CONSTRAINT 'customer_id' FOREIGN KEY ('customer_id') REFERENCES 'customer' ('customer');
)
Как я могу ограничить значение product.user_id на основе значения product.customer_id. Я хочу, чтобы значение product.user_id всегда было равно значению customer.user_id, где customer.customer_id = product.customer_id
Похоже, вы не хотите хранить user_id
в таблице product
. Вы всегда должны искать его, используя поле customer_id
.
Если по какой-то странной причине вам нужно включить его, то вы можете определить второй ключ для customer
и отношения с другим внешним ключом:
CREATE TABLE 'customer' (
'customer_id' int(11) NOT NULL auto_increment,
'name' varchar(255) NOT NULL,
'user_id' int NOT NULL,
PRIMARY KEY ('customer_id'),
CONSTRAINT 'user_id' FOREIGN KEY ('user_id') REFERENCES 'user' ('user_id')
UNIQUE (customer_id, user_id) -- redundant, because customer_id is already unique
);
CREATE TABLE 'product' (
. . .,
FOREIGN KEY (customer_id, user_id) REFERENCES customer(customer_id, user_id)
);