Как ссылаться на 2 разные таблицы с внешним ключом одного и того же столбца? - PullRequest
0 голосов
/ 21 апреля 2020

Вот код для двух разных таблиц, содержащих столбец clientID

CREATE TABLE IndividualClient (
    clientID varchar(30) NOT NULL PRIMARY KEY,
    name varchar(30) NOT NULL,
    address varchar(30) NOT NULL,
    phoneNumber varchar(30) NOT NULL
);

select * from IndividualClient;

CREATE TABLE CorporateClient (
    clientID varchar(30) NOT NULL PRIMARY KEY,
    name varchar(30) NOT NULL,
    address varchar(30) NOT NULL,
    phoneNumber varchar(30) NOT NULL,
    businessRegNumber int(30) NOT NULL
);

select * from CorporateClient;

, и это код, на котором у меня есть внешний ключ:

CREATE TABLE Project (
    Project_ID varchar(30) NOT NULL PRIMARY KEY,
    registrationDate date NOT NULL,
    projectTitle varchar(30) NOT NULL,
    description varchar(30) NOT NULL,
    clientID varchar(30) NOT NULL,
    foreign key (clientID) references IndividualClient (clientID),
    foreign key (clientID) references CorporateClient (clientID)

);

select * from project;

что я Хотите, чтобы столбец clientID в таблице 'projects' мог ссылаться на clientID из IndividualClient или corporateClient

Возможно ли это?

1 Ответ

0 голосов
/ 21 апреля 2020

Будет конфликт Id, и, конечно, вы можете справиться с ним, проверяя доступность ID каждый раз, когда вставляете, но подумайте о создании одной главной таблицы с двумя таблицами со столбцами, зависящими от типа клиента.

Client
------
Id
SomeCommonClientProperties

IndividualClient
----------------
ClientId
FirstName
LastName
Address
PhoneNumber

CorporateClient
---------------
ClientId
Name
Address
PhoneNumber
BusinessRegNumber

Таким образом, вы будете ссылаться на таблицу Client, а уникальный идентификатор ClientId приведет вас к правильной индивидуальной / корпоративной таблице.

PS. Я бы также рассмотрел отдельные таблицы для Address и ContactData, ссылающиеся на Client

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...