Pregunta

¿Cuál es la mejor práctica y ¿Por qué

a) Tipo Mesa, Sustituto / clave artificial

Clave externa es de user.type a type.id: text alt

b) Tipo de tabla, clave natural

Clave externa es de user.type a type.typeName: text alt

¿Fue útil?

Solución

Creo que en la práctica, utilizando una clave natural href="http://en.wikipedia.org/wiki/Natural_key" rara vez es la mejor opción. Probablemente me iría para el sustituta enfoque tecla que en el primer ejemplo.

Las siguientes son las principales desventajas del enfoque clave natural:

  • Es posible que tenga un nombre de tipo incorrecto, o puede que simplemente quieren cambiar el nombre del tipo. Para editarlo, tendría que actualizar todas las tablas que se usan como una clave externa.

  • Un índice en un campo int será mucho más compacto que uno en un campo varchar.

  • En algunos casos, podría ser difícil tener una href="http://en.wikipedia.org/wiki/Unique_key" rel="noreferrer"> clave natural , y esto es necesario ya que se utiliza como clave principal. Esto podría no aplicarse en su caso.

Otros consejos

Una buena razón para usar una clave sustituta (en lugar de una clave natural como el nombre) es cuando la llave natural no es realmente una buena opción en términos de singularidad. En mi vida que he conocido no menos de 4 s "Chris Smith". nombres de personas no son únicos.

Yo prefiero usar la clave sustituta. Es a menudo la gente va a la identidad y utilizar la clave natural que será bien durante un tiempo, hasta que deciden que quieren cambiar el valor. A continuación, comienzan los problemas.

Se debe probablemente siempre utilizar un número de identificación (de esa manera si cambia el nombre del tipo, no es necesario actualizar la tabla de usuario) sino que también le permite mantener su datasize abajo, como una mesa llena de INT es mucho menor que un total de 45 caracteres varchars.

Si typeName es una clave natural, entonces es probable que la opción preferible, ya que no requerirá una combinación para obtener el valor.

Sólo debe utilizar realmente una clave sustituta (ID) cuando el nombre es probable que el cambio.

clave sustituta para mí también, por favor.

El otro podría ser más fácil cuando se necesita para golpear a un cierto código, pero con el tiempo será más difícil. De vuelta en el día, mi técnico jefe decidió utilizar un correo electrónico addr como clave principal era una buena idea. Huelga decir que, cuando las personas querían cambiar sus direcciones que realmente convencer.

Utilice las teclas naturales cada vez que trabajan. Nombres generalmente no funcionan. Son demasiado mutable.

Si está inventando sus propios datos, que también podría inventar una clave syntheic. Si usted está construyendo una base de datos de los datos proporcionados por otras personas o su software, analizar los datos de origen para ver cómo se identifican las cosas que la identificación necesidad.

Si están manejando los datos del todo bien, tendrán claves naturales que trabajan para las cosas importantes. Para las cosas sin importancia, traje a ti mismo.

Bueno, yo creo surrgote clave es útil cuando usted no tiene ninguna clave de identificación única cuyo valor está relacionado y significativa como es de su clave primaria ... Por otra parte clave surrgote es más fácil de aplicar y menos sobrecarga de mantener.

pero por otro lado surrgote clave es a veces hacen costo adicional por unir tablas. pensar 'Usuario' ... tengo

UserId varchar(20), ID int, Name varchar(200)

como la estructura de la tabla.

Ahora consideran que quiero tener una pista en tantas tablas como que es la inserción de registros ... si uso Id como clave principal, a continuación, [1,2,3,4,5..] etc estarán en las mesas exteriores y cada vez que necesito saber quién es la inserción de datos he de unirse a la tabla de usuarios con 1,2,3,4,5,6 porque no tiene sentido. pero si yo uso UserId como clave principal que se identifica de forma única a continuación, en otras mesas extranjeras [john, annie, nadia, linda123] etc, será salvo que a veces es fácilmente distinguible y significativa. por eso es necesario no unirse tabla de usuario cada vez que cuando lo hago consulta.

Pero la mente es, se necesita algo de espacio físico adicional como varchar se guarda en tablas extranjeras que toma bytes adicionales .. y la indexación por supuesto tiene un problema de rendimiento significativo, donde lleva a cabo mejor en lugar de int varchar

clave sustituta es una sustitución de la clave principal natural. Es sólo un identificador único o un número para cada fila que se puede utilizar para la clave primaria de la tabla. El único requisito para una clave primaria sustituta es que es único para cada fila de la tabla.

Es útil porque la clave primaria naturales (es decir, número de cliente en la tabla de clientes) puede cambiar y esto hace que las actualizaciones más difícil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top