Связь между атрибутами внутри одной сущности и запросами / представлениями - PullRequest
0 голосов
/ 05 января 2019

У нас есть сущность users с атрибутами id, name. Как «реализовать» отношения между этими пользователями с помощью правил:

  • пользователь может иметь отношения ex. lover, married, engaged с другой пользователь
  • дубликатов быть не должно (Jack Anne, Anne Jack)
  • пользователь не может иметь отношения с самим собой
  • любое другое, что вы находите логичным

this is solely made up, just me learning db

Итак, я сделал эту диаграмму ER, синие линии - это то, что я установил на уникальный / альтернативный ключ

enter image description here

DB-Fiddle

  1. Это правильный подход или я все это неправильно соединил?
  2. Как решить эту обратную уникальность? В случае, если вы пропустили это, я мог бы разместить Джек-Энн для влюбленных, и Энн-Джек для замужних, даже Джек-Джек (с идентификаторами). я может использовать ограничения CHECK, чтобы они не были равны, или чтобы иметь один идентификатор (который не будет работать с UUID). Но есть ли лучший способ? Является ли ответ на это, сделать всю логику на входе при вставке?
  3. По мнению, я получаю правильные результаты, но можно ли это сделать 'лучше'? Я просто хочу показать users_relationship с users.name, rel_type.type.

Спасибо, любые советы / предложения приветствуются!

1 Ответ

0 голосов
/ 05 января 2019
  1. Да, это хороший подход, по крайней мере, 3NF.

  2. Чтобы избежать симметричных дубликатов , добавьте дополнительное ограничение в таблицу users_relationship, например:

    create table users_relationship (
      column1 definition,
      column2 definition,
      ...
      contraint uq_pair check (users_id < users_2_id)
      ...
    );
    
  3. Да, выглядит хорошо.

...