Имеют ограничения, такие, что внешний ключ в таблице 1 не является внешним ключом в таблице 2 - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть таблица Property, теперь есть две таблицы Rent и sale, каждая из которых имеет property_id в качестве внешнего ключа. Как я могу гарантировать, что независимо от значения property_id в Rent не должно повторяться в продаже? Если это произойдет, MySQL должно выдать ошибку.

Это таблица аренды, точно такая же, как Продажа

CREATE TABLE Rent
(
  /*some data*/
  Property_id INT NOT NULL,
  PRIMARY KEY (Property_id),
  FOREIGN KEY (Property_id) REFERENCES Property(Property_id) ON DELETE CASCADE
);

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете использовать одну таблицу со столбцом дискриминатора

Пример

CREATE TABLE property (
    id   INT AUTO_INCREMENT,
    name VARCHAR(255),
    /* some data */
    PRIMARY KEY (id)
);

CREATE TABLE contract (
    id          INT AUTO_INCREMENT,
    property_id INT NOT NULL,
    type        VARCHAR(32) CHECK ( type IN ('rent', 'sale') ),
    PRIMARY KEY (id),
    FOREIGN KEY (property_id)
        REFERENCES property(id) ON DELETE CASCADE
);

CREATE TABLE Rent (
    id            INT AUTO_INCREMENT,
    /* some data */
    contract_id   INT NOT NULL,
    contract_type VARCHAR(32) CHECK ( contract_type = 'rent'),
    PRIMARY KEY (id),
    FOREIGN KEY (contract_id)
        REFERENCES contact(id) ON DELETE CASCADE
);

CREATE TABLE Sale (
    id            INT AUTO_INCREMENT,
    /* some data */
    contract_id   INT NOT NULL,
    contract_type VARCHAR(32) CHECK ( contract_type = 'sale'),
    PRIMARY KEY (id),
    FOREIGN KEY (contract_id)
        REFERENCES contact(id) ON DELETE CASCADE
);
...