Я хочу создать таблицу MySQL для хранения данных об отношениях между пользователями. Отношения между пользователем A и B и пользователем B и A могут быть разными.
Пример:
- Отношение (от) Боба (к) Алисе: 0,9 - Боб любит вещи Алисы.
- Отношение (от) Алисы (к) Бобу: 0,5 — Алиса находит вещи Боба посредственными.
Мой вопрос:
Я реализовал два ОГРАНИЧЕНИЯ как УНИКАЛЬНЫЕ КЛЮЧИ для двух ВНЕШНИХ КЛЮЧЕЙ, которые ссылаются на user_id в таблице пользователей. Я могу это сделать? Они рассматриваются как два отдельных УНИКАЛЬНЫХ КЛЮЧА?
Как я могу реализовать ОГРАНИЧЕНИЕ, которое позволит только одно вхождение каждого отношения (от) UserA (к) UserB и (от) отношения UserB (к) UserA для каждого user_id? Правильно ли я поступаю?
SQL:
CREATE TABLE relationships (
relationship_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
from_user_id MEDIUMINT UNSIGNED NOT NULL,
to_user_id MEDIUMINT UNSIGNED NOT NULL,
relationship_level DECIMAL(1,1) NOT NULL,
PRIMARY KEY (relationship_id),
FOREIGN KEY (from_user_id) REFERENCES users (user_id)
ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (to_user_id) REFERENCES users (user_id)
ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT from_to_relationship UNIQUE KEY (from_user_id, to_user_id),
CONSTRAINT to_from_relationship UNIQUE KEY (to_user_id, from_user_id),
INDEX relationship_from_to (relationship_id, from_user_id, to_user_id, relationship_level),
INDEX relationship_to_from (relationship_id, to_user_id, from_user_id, relationship_level)
) ENGINE=INNODB;
Я надеюсь, что кто-то может помочь.