Recién estoy comenzando a trabajar con claves foráneas por primera vez y me pregunto si hay un esquema de nombres estándar para usar.
Dadas estas tablas:
task (id, userid, title)
note (id, taskid, userid, note);
user (id, name)
Cuando las tareas tienen notas, las tareas son propiedad de los usuarios y las notas de los autores del usuario.
¿Cómo se nombrarían las tres claves foráneas en esta situación? O, alternativamente, ¿importa algo ?
Actualización : ¡Esta pregunta se trata de nombres de clave externa, no de nombres de campo!
Respuestas:
La convención estándar en SQL Server es:
Entonces, por ejemplo, la clave entre notas y tareas sería:
Y la clave entre tareas y usuarios sería:
Esto le brinda una vista 'de un vistazo' de las tablas que están involucradas en la clave, por lo que es fácil ver de qué tablas depende una en particular (la primera nombrada) (la segunda nombrada). En este escenario, el conjunto completo de claves sería:
Entonces puede ver que las tareas dependen de los usuarios, y las notas dependen de las tareas y los usuarios.
fuente
message
tabla tiene unafrom_user_id
yto_user_id
ambas se convertiríanfk_message_user
. Me parece mejor usarfk_tablename_columnname
(fk_message_from_user_id en mi ejemplo) por este motivo y luego tratar de mantener los nombres de columna claros sobre la tabla de destino (es decir, to_user_id se refiere claramente a la tabla de usuario)Yo uso dos caracteres de subrayado como delimitador, es decir
Esto se debe a que los nombres de las tablas ocasionalmente contienen caracteres de subrayado. Esto sigue la convención de nomenclatura para las restricciones en general porque los nombres de los elementos de datos con frecuencia contienen caracteres de subrayado, por ejemplo
fuente
¿Qué tal
FK_TABLENAME_COLUMNNAME
?K eep I t S imple S tupid siempre que sea posible.
fuente
FK_Animals_OwnerID
—Animales y tabla de propietarios, definidos en la columna Id. De propietarioUna nota de Microsoft sobre SQL Server:
entonces, usaré términos que describan dependencia en lugar de los términos convencionales de relación primaria / extranjera.
Al hacer referencia a la CLAVE PRIMARIA de la tabla independiente (principal) por la (s) columna (s) de nombre similar en la tabla dependiente (secundaria) , omito los nombres de columna:
Al hacer referencia a otras columnas, o los nombres de las columnas varían entre las dos tablas, o simplemente para ser explícitos:
fuente
Por lo general, solo dejo mi ID con nombre PK, y luego concateno el nombre de mi tabla y el nombre de la columna clave al nombrar FK en otras tablas. Nunca me molesto con la carcasa de camello, porque algunas bases de datos descartan la distinción entre mayúsculas y minúsculas y simplemente devuelven todos los nombres en mayúsculas o minúsculas de todos modos. En cualquier caso, así es como se vería mi versión de sus tablas:
Tenga en cuenta que también nombro mis tablas en singular, porque una fila representa uno de los objetos que persisto. Muchas de estas convenciones son de preferencia personal. Sugeriría que es más importante elegir una convención y usarla siempre que adoptar una convención de otra persona.
fuente
Esto probablemente sea una matanza excesiva, pero funciona para mí. Me ayuda mucho cuando trato con VLDB especialmente. Yo uso lo siguiente:
Por supuesto, si por alguna razón no hace referencia a una clave principal, debe hacer referencia a una columna contenida en una restricción única, en este caso:
¿Puede ser largo, sí? ¿Ha ayudado a mantener la información clara para los informes, o me ha dado un salto rápido sobre que el problema potencial es durante una alerta de producto? Al 100% le encantaría saber qué piensan las personas sobre esta convención de nomenclatura.
fuente
Mi enfoque habitual es
O en otros términos
De esta manera puedo nombrar dos claves foráneas que hacen referencia a la misma tabla como
history_info table
con una tablacolumn actionBy and actionTo
fromusers_info
Será como
Tenga en cuenta que:
No incluí el nombre de la tabla secundaria porque me parece de sentido común, estoy en la tabla del niño para poder asumir fácilmente el nombre de la tabla del niño. El carácter total es de 26 y se ajusta bien al límite de oráculo de 30 caracteres que declaró Charles Burns en un comentario aquí.
fuente
Según las respuestas y los comentarios aquí, una convención de nomenclatura que incluye la tabla FK, el campo FK y la tabla PK (FK_FKTbl_FKCol_PKTbl) debe evitar las colisiones de nombres de restricciones FK.
Entonces, para las tablas dadas aquí:
Entonces, si agrega una columna para rastrear quién modificó por última vez una tarea o una nota ...
fuente
Si no hace referencia a sus FK con tanta frecuencia y usa MySQL (e InnoDB), puede dejar que MySQL nombre el FK por usted.
Más adelante, puede encontrar el nombre FK que necesita ejecutando una consulta .
fuente
Intente usar el UUID de la versión 4 en mayúsculas con el primer octeto reemplazado por FK y '_' (guión bajo) en lugar de '-' (guión).
P.ej
FK_4VPO_K4S2_A6M1_RQLEYLT1VQYV
FK_1786_45A6_A17C_F158C0FB343E
FK_45A5_4CFA_84B0_E18906927B53
La justificación es la siguiente
fuente