Влияет ли определение внешних ключей и табличных отношений на написание запросов? - PullRequest
0 голосов
/ 18 февраля 2011

Я собирал таблицу в Mysql Workbench и определял отношения многие-к-одному, какие ключи были внешними ключами и т. Д., И я знаю, что это вставлено в настоящий скрипт Create. Поэтому мне интересно, это просто для того, чтобы убедиться, что модель данных логична из-за кулис, или эти отношения могут вообще использоваться в запросах? Если они могут быть, какие операции могут быть связаны с ними? (краткий пример кода был бы замечательным)

Сейчас я строю базу данных SQLite в плагине sqlitemanager firefox. У него нет вариантов, чтобы определить эти вещи, и мне интересно, если я должен заботиться. (до этого момента я делал довольно простые запросы).

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

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

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

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

1 голос
/ 18 февраля 2011

Внешние ключи очень полезны. Скажем, у вас есть приложение со странами и городами.

Country
id
name

City
id
name
countryId

У каждого города есть внешний ключ, в котором указано, в какой стране находится город. Поскольку вы определили «countryId» в таблице «city» как внешний ключ, который указывает на столбец «id» в таблице «country» Вы можете заставить MySQL автоматически удалять все соответствующие города при удалении страны.

...