Связь "Один-к-разным"
От: corpse56  
Дата: 14.04.16 09:33
Оценка:
Здравствуйте!
Есть вот такая структура:
CREATE TABLE Contract (
 ID int NOT NULL auto_increment,
 IDPRODUCT int NOT NULL,-- типа "FK"
 PRODUCTTYPE varchar(9) NOT NULL ,
 …
 PRIMARY KEY (ID)
)

CREATE TABLE Product_A (
 ID int NOT NULL auto_increment,
 NAME_A varchar(50) NOT NULL ,
 --другие поля специфичные для Product_A 
 …
 PRIMARY KEY (ID)
)

CREATE TABLE Product_B (
 ID int NOT NULL auto_increment,
 NAME_B varchar(50) NOT NULL ,
 --другие поля специфичные для Product_B 
 …
 PRIMARY KEY (ID)
)

CREATE TABLE Product_C (
 ID int NOT NULL auto_increment,
 NAME_C varchar(50) NOT NULL ,
 --другие поля специфичные для Product_C 
 …
 PRIMARY KEY (ID)
)


Здесь при создании контракта указывается какой продукт будет производится по этому контракту. Но так как ID продуктов пересекаются, то Foreign Key создать не получается. Приходится "вручную" следить за целостностью. Скажите, как можно переделать структуру, чтобы можно было объявить FK?
Использую MS SQL 2008 R2

Очень интересная статья на эту тему здесь. Данная структура, ближе всего к последнему варианту, предложенному в статье. Но там немного другая логика. У меня внешним ключом должен быть столбец из таблицы Contract, а там связка идёт по первичным ключам.
Я так понимаю, что создать FK на несколько таблиц невозможно в принципе. Даже если ID не будут пересекаться. Как тогда можно выйти из этой ситуации?
Спасибо.
реляционное наследование наследование в реляционных бд наследование в реляционных
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.