У вас есть хорошие ответы. Позвольте мне попытаться добавить еще один.
ПОДПИСЬ требует как абонента, так и категорию. Поэтому каждый из этих столбцов не должен допускать null. Предотвращение нулей - это не то же самое, что ограничение внешнего ключа.
Нельзя также вставлять строку в ПОДПИСКИ, если пользователь еще не существует в таблице USERS; и невозможно добавить строку в ПОДПИСКИ, если категория еще не существует в таблице КАТЕГОРИИ. Для того, чтобы обеспечить соблюдение этих правил ваша таблица ПОДПИСКИ требует двух внешних ключей:
ALTER TABLE ПОДПИСКИ ADD CONSTRAINT FK_SUBSCRIPTIONS_USERS FOREIGN KEY (идентификатор пользователя) СПРАВОЧНЫЙ ПОЛЬЗОВАТЕЛИ (USERID) ALTER TABLE ПОДПИСКИ ADD CONSTRAINT FK_SUBSCRIPTIONS_CATEGORIES FOREIGN KEY (CategoryID) Лит КАТЕГОРИИ (CategoryID)
при создании внешнего ключа на столе, вы, в сущности, говоря, ядро базы данных: убедитесь, что любое значение, которое получает вставляется в это таблица уже существует в этой другой таблицы.BTW, требование для создания ограничения заключается в том, что уникальное ограничение должно действовать на столбец (столбцов), на которые ссылаются в , что таблица; обычно ссылочный столбец (-ы) , что таблица будет первичным ключом , что стол.
Создав ограничение внешнего ключа, вы не говорившего двигатель базы данных: убедитесь, что строка получает вставленную в этой таблицы. Вполне возможно (хотя было бы необычно), что это В таблице нет строк. Ограничение внешнего ключа просто гарантирует, что любое значение, которое делает, будет вставлено в . Таблица имеет аналог в , что стол.
«Должен ли я иметь внешний ключ между таблицами пользователей и подписки, хотя не обязательно подписываться на что-то?» -- да. –
Я думаю, что, возможно, это следует рассматривать как отношение многих ко многим, где Subscription - это таблица соединений? – johan