2016-10-21 6 views
1

enter image description hereодин к одному отношения между тремя таблицами

Привет Я хочу, чтобы достичь одного ВЗ один отношения корабль между тремя таблицами, например, что rtTicketId (1) могут быть использованы только VMID (1) и не могут быть использованы DBID (1).

create table IF NOT EXISTS RequestTable (
    rtTicketId bigserial unique not null AUTO_INCREMENT, 
    primary key (rtTicketId)); 

create table IF NOT EXISTS Vm (
    vmId bigserial unique not null AUTO_INCREMENT, 
    primary key (vmId), 
    foreign key (rtTicketId) references RequestTable(rtTicketId)); 

create table IF NOT EXISTS Db (
    dbId bigserial unique not null AUTO_INCREMENT, 
    rtTicketId bigserial unique not null, 
    primary key (dbId), 
    foreign key (rtTicketId) references RequestTable(rtTicketId)); 

Я сделал это, но это создает отношения один к одному между двумя отдельно. Я хочу, чтобы идентификатор rt был уникальным. прямо сейчас обе таблицы vm и db могут использовать тот же rtTicketId для подключения к таблице запроса. Я не хочу, чтобы

+0

Чтобы быть полностью понятным - запрос может быть как для БД, так и для виртуальной машины, но не для обоих? –

+0

@NevilleK да только один может запросить за один раз – Pritbh

+0

http://stackoverflow.com/questions/1493229/multiple-yet-mutually-exclusive-foreign-keys-is-this-the-way-to-go - делает это ответьте на свой вопрос? –

ответ

0

Возможно, полиморфная ассоциация поможет; например Вместо VM, поскольку DB имеет столбец для хранения rtTicketId, RT будет иметь 2 столбца, fkId и fkType, например, fkId хранит первичный ключ в VM или DB, а fkType определяет, где искать при запросе (DB или VM).

Смотрите также здесь: Possible to do a MySQL foreign key to one of two possible tables?

Другой вариант я могу думать о делает это программно, такие как:

SELECT * FROM RequestTable WHERE rtTicketId NOT IN (SELECT DISTINCT rtTicketId ОТ your_other_table_vm_or_db)

+0

делать это программно, это не так эффективно, как позже в базе данных, чтобы расти, чтобы иметь другие типы, такие как рабочий стол и некоторые другие таблицы (кроме vm и db) – Pritbh

Смежные вопросы