Mysql 基于另一个引用字段限制字段的值

Mysql 基于另一个引用字段限制字段的值,mysql,sql,Mysql,Sql,我有一个表,它的主键在其他几个表中作为外键引用。例如: 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`

我有一个表,它的主键在其他几个表中作为外键引用。例如:

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.customer\u id的值限制product.user\u id的值。我希望product.user\u id的值始终等于customer.user\u id的值,其中customer.customer\u id=product.customer\u id

听起来您不想将
用户id
存储在
产品
表中。您应该始终使用
customer\u 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)
  );

我看不出冗余数据如何有助于安全或改进系统管理。