Связи с базой данных с использованием phpmyAdmin (составные ключи) - PullRequest
1 голос
/ 04 апреля 2010

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

  1. Лицо (обязательно)
  2. Элемент (обязательно)
  3. Место (необязательно)
  4. Цена (необязательно)

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

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

1 Ответ

2 голосов
/ 13 апреля 2010

NULL значения

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

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

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

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

Композитные ключи

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

...