Я только начинаю работать с внешними ключами в первый раз, и мне интересно, есть ли стандартная схема именования для них?
Учитывая эти таблицы:
task (id, userid, title)
note (id, taskid, userid, note);
user (id, name)
Там, где у Задач есть Заметки, Задачи принадлежат Пользователям, а Пользователям - Примечания автора.
Как бы назвали три внешних ключа в этой ситуации? Или, наоборот, это вообще имеет значение ?
Обновление : этот вопрос касается имен внешних ключей, а не имен полей!
Ответы:
Стандартное соглашение в SQL Server:
Так, например, ключ между заметками и задачами будет:
И ключ между задачами и пользователями будет:
Это дает вам представление о том, какие таблицы задействованы в ключе, и позволяет легко увидеть, от каких таблиц зависит конкретная (названная первая) (названа вторая). В этом случае полный набор ключей будет:
Таким образом, вы можете видеть, что задачи зависят от пользователей, а заметки зависят как от задач, так и от пользователей.
источник
message
таблица имеетfrom_user_id
иto_user_id
оба из них станутfk_message_user
. Мне кажется, лучше использоватьfk_tablename_columnname
(fk_message_from_user_id в моем примере) по этой причине, а затем попытаться сохранить имена столбцов в ясности относительно целевой таблицы (т. Е. To_user_id явно ссылается на пользовательскую таблицу)Я использую два символа подчеркивания в качестве разделителя, т.е.
Это связано с тем, что имена таблиц иногда содержат символы подчеркивания. Это в целом соответствует соглашению об именах для ограничений, поскольку имена элементов данных часто содержат символы подчеркивания, например
источник
Как насчет
FK_TABLENAME_COLUMNNAME
?К EEP I т S реали S tupid всякий раз , когда это возможно.
источник
FK_Animals_OwnerID
таблица «Животные и владельцы», определенная в столбце OwnerIDПримечание от Microsoft относительно SQL Server:
поэтому я буду использовать термины, описывающие зависимость, вместо традиционных терминов первичные / внешние отношения.
При ссылке на PRIMARY KEY независимой (родительской) таблицы по столбцу (ам) с аналогичным именем в зависимой (дочерней) таблице я опускаю имя (имена) столбца:
При ссылке на другие столбцы, или имена столбцов различаются между двумя таблицами, или просто чтобы быть явным:
источник
Я обычно просто оставляю свой PK с именем id, а затем объединяю свое имя таблицы и имя ключевого столбца при именовании FK в других таблицах. Я никогда не зацикливался на верблюжьем загоне, потому что некоторые базы данных отбрасывают чувствительность к регистру и в любом случае просто возвращают все прописные или строчные буквы. В любом случае, вот как будет выглядеть моя версия ваших таблиц:
Обратите внимание, что я также называю свои таблицы в единственном числе, потому что строка представляет один из объектов, которые я сохраняю. Многие из этих соглашений являются личными предпочтениями. Я бы предположил, что более важно выбрать конвенцию и всегда использовать ее, чем принять чужую конвенцию.
источник
Это, вероятно, чрезмерное убийство, но это работает для меня. Это очень помогает мне, особенно когда я имею дело с VLDB. Я использую следующее:
Конечно, если по какой-то причине вы не ссылаетесь на первичный ключ, вы должны ссылаться на столбец, содержащийся в уникальном ограничении, в этом случае:
Это может быть долго, да. Помогло ли это сохранить ясность информации для отчетов или заставило меня быстро подсказать, что потенциальная проблема заключается в том, что во время предварительного уведомления 100% хотели бы узнать мнение людей об этом соглашении об именах.
источник
Мой обычный подход
Или другими словами
Таким образом, я могу назвать два внешних ключа, которые ссылаются на одну и ту же таблицу, как
history_info table
сcolumn actionBy and actionTo
изusers_info
таблицыЭто будет как
Обратите внимание, что:
Я не включил имя дочерней таблицы, потому что это кажется мне здравым смыслом, я нахожусь в таблице ребенка, поэтому я могу легко принять имя таблицы ребенка. Его общий характер равен 26 и хорошо соответствует пределу оракула в 30 символов, который был изложен Чарльзом Бернсом в комментарии здесь.
источник
Основываясь на ответах и комментариях здесь, соглашение об именах, которое включает в себя таблицу FK, поле FK и таблицу PK (FK_FKTbl_FKCol_PKTbl), должно избегать коллизий имен ограничений FK.
Итак, для приведенных таблиц здесь:
Итак, если вы добавите столбец, чтобы отслеживать, кто в последний раз изменил задачу или заметку ...
источник
Если вы не часто ссылаетесь на свои FK и используете MySQL (и InnoDB), вы можете просто позволить MySQL назвать FK для вас.
Позже вы можете найти нужное имя FK, выполнив запрос .
источник
Попробуйте использовать UUID версии 4 в верхнем регистре с заменой первого октета на FK и '_' (подчеркивание) вместо '-' (тире).
Например
FK_4VPO_K4S2_A6M1_RQLEYLT1VQYV
FK_1786_45A6_A17C_F158C0FB343E
FK_45A5_4CFA_84B0_E18906927B53
Обоснованием является следующее
источник