- 1 У пользователя много виджетов
Предполагается, что виджет является эксклюзивным для одного пользователя (потому что у вас есть отдельная точка для многих для многих): user_id
для таблицы widget
, чтоссылается на первичный ключ на user
- виджет принадлежит 1 пользователю
см. выше.
- 1 пользователь имеет 1 виджет
widget_id
в таблице user
, которая ссылается на первичный ключ в таблице widget
, с уникальным индексом в widget_id
или наоборот, на самом деле не имеет значения.Если это отношение 1-к-1, а не отношение 0 или 1-к-1, следует рассмотреть возможность размещения виджета и пользователя в одной таблице.
- пользовательские [многие-ко-многим] виджеты
Представьте третью таблицу, user_widget
, с 2 полями user_id
и widget_id
, ссылающимися на соответствующие первичные ключи в таблице пользователей и виджетов.
- много пользователейподелиться 1 виджетом
так же, как «1 пользователь имеет 1 виджет», но без уникального индекса для widget_id
Опция ON CASCADE
работает от родителя (первичный ключ)ребенку (внешний ключ / ссылка).Поэтому, если у вас есть ON DELETE CASCADE
в вашем первом сценарии (1 пользователь имеет много виджетов), удаление пользователя удаляет все его виджеты, но удаление всех виджетов не удаляет пользователя.