Проектирование базы данных - таблица «многие ко многим», которая связывает те же объекты - PullRequest
1 голос
/ 24 сентября 2011

У меня есть таблица Пользователь со столбцом id . Я хочу, чтобы у пользователя были отношения с другими пользователями, поэтому я создаю таблицу Отношения со столбцами user_id_1 и user_id_2 .

Вопрос в том, как ограничить таблицу так, чтобы

1) нет записей, где user_id_1 равно user_id_2 .

Например, запись (1, 1) плохая, потому что она указывает на отношение к себе.

2) если есть запись (user_id_1, user_id_2) , запись (user_id_2, user_id_1) не допускается.

Например, наличие записей (1, 2) и (2, 1) является плохим, поскольку оно указывает на одинаковые отношения.

Я использую MySQL, хотя думаю, что это общая проблема дизайна. Спасибо!

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Вы используете триггер:

DELIMITER $$

CREATE TRIGGER bi_relationschip_each BEFORE INSERT ON relationship FOR EACH ROW
BEGIN
  IF NEW.user1_id = NEW.user2_id THEN
    SELECT error_user1_cannot_be_equal_to_user2 FROM generate_error;
  END IF; 
END $$

DELIMITER ;
1 голос
/ 24 сентября 2011

Вы можете написать триггеры INSERT и UPDATE в таблице соединений, которые проверяют эти условия.

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