ограничение значения поля на основе другого ссылочного поля

0

У меня есть таблица, первичный ключ которой упоминается в нескольких других таблицах как внешний ключ. Например:

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

Теги:

1 ответ

1

Похоже, вы не хотите хранить 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)
  );
  • 0
    Я храню это для безопасности и управления собственностью
  • 0
    Я не вижу, как избыточные данные способствуют безопасности или улучшению управления системой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню