Можно ли добавить необязательную ссылку на необнуляемый столбец? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть две таблицы (endorsement и work_data) в моей базе данных, которые оба ссылаются на объекты ("работы"), внешние по отношению к моему проекту, то есть имеют идентификатор (pid), который я не определил (сравните, например, ISBN для книг).

Для каждой существующей работы я могу добавить endorsement, work_data, оба или ни того, ни другого.

Теперь мой вопрос: могу ли я иДолжен ли я добавить внешний ключ, связывающий столбцы pid как endorsement, так и work_data, учитывая, что в них может быть или не быть строк об этом pid?Я хотел бы иметь возможность эффективно извлекать work_data, если возможно, для работы, на которую ссылается данный endorsement, и наоборот.

Я использую PostgreSQL, если это имеет значение.

Редактировать: По запросу, пример.Напечатано наизусть, поэтому не обращайте внимания на синтаксические ошибки - мне интересно узнать о дизайне базы данных и о том, какие соображения следует учитывать относительно эффективности того, что я хочу сделать.

endorsement:

| pid | user |
| -- | -- |
| 10.0000/00 | 1 |
| 10.1111/11 | 1 |

(Таким образом, пользователь 1 одобрил две работы.)

work_data:

| pid | title |
| -- | -- |
| 10.1111/11 | 'Some article that has an endorsement' |
| 10.2222/22 | 'Some other article that does not have an endorsement' |

(Итак, мы знаем о двух работах, одна из которых такжеперечислены в таблице endorsement.

Теперь я хотел бы иметь возможность выбирать одобрения с присоединенными данными, например,

SELECT endorsement.*, pid.title FROM endorsement LEFT JOIN work_data ON endorsement.pid=work_data.pid;

| pid | user | title |
| -- | -- | -- |
| 10.0000/00 | 1 | NULL |
| 10.1111/11 | 1 | 'Some article that has an endorsement' |

Аналогично, я хотел бы бытьвозможность выбора рабочих данных с присоединенными одобрениями, например

SELECT work_data.*, endorsement.user FROM work_data LEFT JOIN endorsement ON work_data.pid=endorsement.pid;

| pid | title | user |
| -- | -- | -- |
| 10.1111/11 | 'Some article that has an endorsement' | 1 |
| 10.2222/22 | 'Some other article that does not have an endorsement' | NULL |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...