Базы данных с иностранными ключами: хороший способ представить отношения вперед или назад? - PullRequest
0 голосов
/ 23 апреля 2020

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

Хотя на практике я работаю с ними просто, часто описываются как «прямое отношение» или «обратное / backref / related_name / идти назад» всегда само по себе кажется мне задом наперед!

Например, многие источники и статьи описывают переход от ребенка к родителю как «прямой внешний ключ». Но когда я рисую дерево, я начинаю с родительского узла сверху, и я рассматриваю его обход как «вперед», что противоположно тому, как везде описывается переход от родителя -> ребенка как обратное или обратное отношение.

У кого-нибудь есть причина, объясняющая эту номенклатуру, которая могла бы помочь мне вспомнить это? Или как ты это себе представляешь? Я искал по этой теме c и не нашел никого, кто обсуждал бы соглашения / терминологию (просто как с ней кодировать).

1 Ответ

1 голос
/ 23 апреля 2020

В реляционной модели отношения (корабль) s / ассоциаций представлены в виде таблиц. Ограничения FK (внешний ключ) не являются отношениями, хотя их ошибочно называют. Они являются ограничениями и не должны быть объявлены, известны или существуют для запроса. Ограничение FK гласит, что значения появляются в другом месте один раз. Или, эквивалентно, то, что ценности / сущности, участвующие вместе в определенных отношениях, участвуют вместе в определенных других отношениях один раз. «Родитель» по сравнению с «дочерним» применяется к любым древовидным или другим иерархически структурированным отношениям, а «прямой» и «обратный» являются обобщенными терминами c, применимыми к любому направлению любых направленных двоичных отношений, включая мета-отношения в таблицах. "имеет FK, который ссылается" или "появляется один раз в". (Хотя на самом деле это не то, как назывались ФК "отношениями".)

Есть только общие соглашения ... в том числе и для "деревьев" ... забавно, деревья вне go выше root не вниз Падение деревьев информатики - это просто еще одно соглашение ... для западных людей, пишущих сверху вниз, туда, где больше места. Хотя для некоторых соглашений могли быть особые причины, нет смысла беспокоиться о том, чтобы они имели смысл или были в согласии.

Мы говорим, что FK ссылается на PK, поэтому чтение слева направо, как в Engli sh, мы могли бы называть это "вперед". ФК могут образовывать циклы реляционно, но СУБД SQL имеют тенденцию ограничивать объявления деревьями, потому что они перегружают их каскадной функциональностью и не пытаются допустить даг или циклы. Таким образом, в SQL на родителя ссылаются, а на ребенка ссылаются. Но SQL FK не являются аналогами реляционных FK; они являются аналогами того, что мы можем назвать реляционными иностранными суперключами. Таким образом, перегружен "FK".

Нет оснований ожидать согласованности. Французский тост не тост. Отношения не являются отношениями.

Не используйте эти обобщенные c термины. Вместо этого четко определите отношения (корабли), о которых вы говорите, называя и / или упорядочение их параметров и правильное использование технических терминов, таких как «ссылка» и «ссылка». Нужно ли говорить, что вы должны запомнить определения технических терминов ? Или для обобщенных c терминов, в соответствии с этим, определите, что конкретно означает c, что означает, что вы собираетесь использовать для обобщенных c терминов в каждом конкретном c контексте. (Но вы просто просите о недопонимании.)

Разве не правильно говорить о таблицах Parent-Child в дизайне базы данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...