Отношения с базой данных с использованием phpmyAdmin (составные ключи)

Я немного запутался в создании хорошей реляционной базы данных. Я использую phpmyAdmin для создания базы данных. У меня есть следующие четыре таблицы. Не беспокойтесь о том, что место и цена не являются обязательными, они просто есть.

  1. Лицо (обязательно)
  2. Пункт (Обязательный)
  3. Место (необязательно)
  4. Цена (необязательно)

Элемент основной таблицы. Он всегда будет иметь связанного человека. * Я знаю, что вы делаете соединения в mysql для таблиц. Если я хочу связать таблицы вместе, я мог бы использовать составные ключи (используя идентификаторы из каждой таблицы), однако является ли это наиболее правильным способом связать таблицы? Это также означает, что у элемента будет 5 идентификаторов, включая собственный. Все это приводит к нулевым значениям (по-видимому, большое нет, что я могу понять), потому что, если место и цена являются необязательными и не используются в одной записи в таблице элементов, у меня будет там нулевое значение. Пожалуйста помоги!

Заранее спасибо. Я надеюсь это имеет смысл.


person Community    schedule 04.04.2010    source источник


Ответы (1)


Значения NULL

Это также означает, что у элемента будет 5 идентификаторов, включая собственный. Все это приводит к нулевым значениям (по-видимому, большое нет, что я могу понять), потому что, если место и цена являются необязательными и не используются в одной записи в таблице элементов, у меня будет нулевое значение там

Лично я думаю, что это одна из ситуаций, когда значения NULL идеальны, и у меня, конечно, не было бы никаких сомнений по поводу включения этого в структуру моей базы данных.

Один из способов, которым я видел, как другие добиваются того же самого без значений NULL, заключается в создании записи в необязательных таблицах (место и цена в вашем примере) с идентификатором 0, что означает отсутствие связанной записи, но это просто делает в 10 раз больше. поработайте с разработчиком приложения, чтобы отфильтровать эти записи - гораздо проще выполнить соединение, и если вы не получите никаких записей, в дополнительной таблице нет связанных записей.

Просто не забудьте выполнить соединение LEFT или RIGHT OUTER, если вы хотите вернуть Item независимо от того, связаны ли они с Place или Price (вы получите значения NULL в необязательных столбцах таблицы для Item, которые не имеют связанных записей) и INNER присоединяйтесь, если вы только хотите, чтобы Item, которые делают, имели связанную необязательную запись.

Составные ключи

Составной ключ — это ключ в таблице, состоящей более чем из одного столбца. Если у каждого из ваших Person, Item, Place и Price есть идентификатор (даже если это просто автоматически увеличивающееся число), вам не понадобится составной ключ - только столбец первичного ключа в каждой таблице и столбец внешнего ключа в таблица Item для каждой связанной таблицы - например. item_id, person_id, place_id, price_id. Вы утверждаете, что Item имеет собственный идентификатор, поэтому вам не нужен составной ключ — достаточно первичного ключа в столбце item_id.

person Community    schedule 13.04.2010
comment
Как бы вы удостоверились, что в INSERT введены правильные идентификаторы? Например, когда я вставляю, я не получаю правильный идентификатор для других таблиц, нужно ли мне делать это с операторами mysql? - person Cool Hand Luke; 18.04.2010