SQL многие ко многим - PullRequest
       57

SQL многие ко многим

1 голос
/ 23 марта 2020

entity relationship diagram

Мне нужно создать простой форум (доску объявлений) как школьный проект. Но я столкнулся с одной проблемой. В приведенном выше img есть 2 таблицы: post и category, которые имеют отношение «многие ко многим». Я сделал бридж-стол, в котором хранятся postKey и categoryKey. Это плохая практика для создания составного первичного ключа из этих двух ключей, или мне нужно что-то вроде postCategoryKey? А что еще мне улучшить?

Ответы [ 3 ]

1 голос
/ 23 марта 2020

Зависит от того, что если позже вы планируете добавить дополнительные метаданные к postCategoryKey в отдельной таблице, это имеет смысл.

В вашем случае - я бы go с составным первичным ключ и избавиться от postCategoryKey

1 голос
/ 23 марта 2020

Вы должны будете сделать postKey и categoryKey не равными NULL и в любом случае создать для них уникальное ограничение. Это делает их ключом для таблицы, независимо от того, называете это «первичным ключом» или нет.

Итак, есть три варианта:

  1. Оставьте это, как описано с NOT NULL и ограничение уникальности.
  2. Объявите два столбца первичным ключом таблицы.
  3. Создайте дополнительный столбец postCategoryKey и сделайте его первичным ключом.

Решение на самом деле не имеет значения. У некоторых компаний есть соглашение о стиле базы данных. В этом случае это легко; просто следуйте правилам компании. Некоторые люди хотят, чтобы каждая таблица имела первичный ключ из одного столбца. Если это так, добавьте этот столбец PK. Некоторые люди хотят, чтобы таблицы мостов имели составной первичный ключ, чтобы сразу показать, что идентифицирует строку. Мое личное предпочтение - последнее, но любой метод на самом деле так же хорош, как и другой. Просто будьте последовательны в своей базе данных.

1 голос
/ 23 марта 2020

На мой взгляд, нет необходимости в PostCategoryKey, потому что это всего лишь таблица отношений, и вы не получите ее по postCategoryKey. Я бы создал PK, используя еще 2 FK (postKey и categoryKey).

Надеюсь, это поможет!

...