Sendo que eles devem ser únicos, como devo nomear FK's em um banco de dados MySQL?
mysql
naming-conventions
foreign-keys
Zumbis
fonte
fonte
Respostas:
No MySQL, não há necessidade de dar um nome simbólico às restrições de chave estrangeira. Se um nome não for fornecido, o InnoDB cria um nome exclusivo automaticamente.
Em qualquer caso, esta é a convenção que utilizo:
Exemplo:
Tento manter os mesmos nomes de campo nas tabelas de referência e referenciadas, como no
user_id
exemplo acima. Quando isso não for prático, também acrescento o nome do campo referenciado ao nome da chave estrangeira.Essa convenção de nomenclatura me permite "adivinhar" o nome simbólico apenas olhando as definições da tabela e, além disso, também garante nomes exclusivos.
fonte
member_id
~> link para o membro da tabela,edited_id
~> chave estrangeira para o usuário editado, também link para o membro da tabela. Como devo nomeá-los?minha escolha é diferente. na minha opinião, uma tabela deve ter um
id
campo, nãouser_id
um, porque a tabela é apenas chamadauser
, então:user_id
namessages
tabela é um campo fk, então ele deve deixar claro qual id é (user_id
).uma convenção de nomenclatura totalmente autoexplicativa, na minha opinião, poderia ser:
Nota:
este fk poderia ser único, porque se
messages_user
existir uma tabela, o nome do campo de referência deve seruser_id
(e não apenasid
) e o nome fk deve ser:fk_messages_user_user_id_users_id
em outras palavras, uma convenção de nomenclatura de chave estrangeira garante que você tenha certeza sobre nomes exclusivos se você também usar uma convenção de nomenclatura "campo de referência / referenciado" (e você pode escolher a sua própria, é claro).
fonte
$id
variável em algum lugar sem nenhuma ideia a qual tabela ela pertence. Quanto mais antiga for a sua base de código e quanto mais pessoas trabalharem nela, mais provável será.Se você não se pega referenciando fk's tão frequentemente depois que eles são criados, uma opção é mantê-lo simples e deixar o MySQL dar a nomenclatura para você (como Daniel Vassallo menciona no início de sua resposta ).
Embora você não possa "adivinhar" exclusivamente os nomes das restrições com este método - você pode encontrar facilmente o nome da restrição da chave estrangeira executando uma consulta:
Por exemplo, você pode receber o seguinte da consulta:
Se esta etapa extra não for demais para você, você poderá encontrar facilmente o fk que está procurando.
fonte
O motivo é a combinação de
referencing_table
ereferencing_field
é único em um banco de dados. Desta forma, torna o nome da chave estrangeira fácil de ler, por exemplo:Portanto, temos duas chaves estrangeiras:
Adicionar o
user
nome da tabela ao nome da chave estrangeira é redundante.fonte
user_role
?user
erole
tem relacionamento muitos com muitos euser_role
é a tabela que contém todas as chaves estrangeiras. Deveria serfk_user_role_role
?