Отношения InnoDB: односторонние или двусторонние? - PullRequest
1 голос
/ 22 августа 2011

Я впервые решил переключиться на InnoDB и поэкспериментировать с внешними ключами и другими функциями InnoDB.

При создании отношений я должен объявлять их только на 1 таблице? Или обе таблицы?

Например, для каждого случая ниже, где и как вы объявите отношения?

  • 1 У пользователя много виджетов
  • виджет принадлежит 1 пользователю (это то же самое, что и выше?)
  • 1 пользователь имеет 1 виджет
  • пользовательские [многие-ко-многим] виджеты
  • многие пользователи делятся 1 виджетом

Это всего лишь несколько случайных примеров, я просто пытаюсь понять, какие направления отношений должны быть объявлены.

Кроме того, в том же духе, в каком направлении работает материал "ON CASCADE"?

Спасибо

1 Ответ

1 голос
/ 22 августа 2011
  • 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 пользователь имеет много виджетов), удаление пользователя удаляет все его виджеты, но удаление всех виджетов не удаляет пользователя.

...