Быстрый вопрос о реляционной базе данных «один ко многим» - PullRequest
0 голосов
/ 28 августа 2011

Я делаю базу данных мест / событий, и я создал свои таблицы и хотел бы получить подтверждение от кого-то, если я все сделал правильно:)

У меня есть 2 таблицы:

  • Venues
  • Events

Первичным ключом Venues является VENUE_ID, для которого установлено значение auto_increment.У меня такой же столбец в Events, который будет содержать номер идентификатора объекта.Это должно их соединить, верно?

Кроме того, движок таблицы - MyISAM.

Ответы [ 3 ]

2 голосов
/ 28 августа 2011

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

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

Я предлагаю вам использовать InnoDB (или, если это возможно, переключиться на PostgreSQL - он не только обеспечивает ограничения внешнего ключа, он также имеет полную поддержку транзакций, в отличие от MySQL, который будет молча фиксировать ожидающую транзакцию всякий раз, когда вы что-то делаете это не поддерживается в транзакции, с потенциально разрушительными результатами). Если вы хотите / хотите использовать MySQL, я предлагаю вам использовать InnoDB для всего, если только вы не знаете, что вам нужна дополнительная производительность, которую вы можете получить от MyISAM и , вы можете позволить себе предостережения. Также имейте в виду, что перенос больших таблиц из MyISAM в InnoDB на более поздних этапах производства может быть болезненным или даже невозможным.

2 голосов
/ 28 августа 2011

Ваша структура БД верна.Вы можете использовать Innodb для добавления ограничений внешнего ключа.Также не забудьте добавить индекс ко второй таблице для более быстрого объединения двух таблиц.

Дополнительная информация о FK http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

Примечание к комментариям: Innodb позволяет вам сделать одновременный выбор / (вставить / обновить), но MyIsam позволяет вам делать то же самое, если вы не удаляете из таблицы MyIsam.В противном случае MyIsam заблокирует всю вашу таблицу.

0 голосов
/ 28 августа 2011

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

...