database - traductor - ¿Tecla primaria nativa o generada automáticamente?
primary key y foreign key (6)
Como regla general, ¿es mejor usar claves primarias nativas (es decir, columnas existentes o combinación de columnas) o establecer su clave principal en una fila de enteros de generación automática?
EDITAR:
Se me ha señalado que esto es muy similar a esta pregunta .
El consenso aquí es usar claves sustitutivas, que era mi inclinación natural, pero mi jefe me dijo que también debería usar claves naturales cuando sea posible. Su consejo puede ser mejor para esta aplicación en particular, ya que Nombre en fila lo identifica de manera única y tenemos la necesidad de mantener la capacidad de ver los datos antiguos, por lo tanto, cualquier cambio en el nombre / regla va a significar una nueva fila única.
Si bien las respuestas aquí son útiles, la mayoría de ellas se basan en lo subjetivo "aquí es lo que debes", y no citan fuentes de apoyo. ¿Me falta alguna lectura esencial o el diseño de la base de datos de mejores prácticas es altamente subjetivo y / o dependiente de la aplicación?
Es una vieja guerra entre puristas y pragmáticos. Los puristas no aceptan claves primarias sustitutas e insisten en usar solo las naturales. Si me preguntas, votaré por incremento (claves sustitutas) en la mayoría de las situaciones.
Sea lo que sea, hágalo no significativo (clave sustituta). Las claves principales significativas son mortales.
Siempre ints.
Apreciará que lo haya hecho cuando llegue el momento de hacer una referencia cruzada de esos elementos en otras tablas (usando claves externas)
Una clave principal
- debe identificar una fila de manera única.
- no debe contener datos, o cambiará cuando los datos cambien (lo cual es malo)
- debe ser rápido al comparar operaciones (WHERE cláusulas / uniones)
Idealmente, utiliza una clave artificial (sustituta) para sus filas, un tipo de datos numéricos enteros (INT) es mejor, porque ahorra espacio y es rápido.
Se debe hacer una clave primaria del número mínimo de campos para cumplir las condiciones 1.-3. Para la gran mayoría de las tablas, este mínimo es: 1 campo.
Para tablas de relación (o casos de borde muy especiales), puede ser mayor. Hacer referencia a una tabla con una clave primaria compuesta es engorroso, por lo que no se recomienda una clave compuesta para una tabla a la que se debe hacer referencia por sí mismo.
En las tablas de relación (relaciones m: n) se crea una clave compuesta de las claves principales de las tablas relacionadas, por lo tanto, su clave compuesta cumple automáticamente las tres condiciones de arriba.
Puede hacer claves primarias con datos si está absolutamente seguro , será único y nunca cambiará. Como esto es difícil de garantizar, recomendaría no hacerlo.
Yo diría autogeneración, no hay una razón real para no hacerlo en mi mente. A menos que desarrolles algún tipo de tabla hash, pero aún así, me quedaré con una clave primaria única creada automáticamente por la base de datos. Es rápido, simple y confiable. No reinventar la rueda si ya está allí.