none
¿Cuándo usar una llave primaria compuesta y cuándo usar una llave primaria autoincremental? RRS feed

  • Pregunta

  • Hola a todos, 

    Tengo algundas dudas con respecto al modelado de base datos, ¿hay alguna norma que indíque cuando usar una llave primaria compuesta y cúando una autoincremental o de campo único? 

    Tengo algo de confusión con una llave primaria compuesta, no tengo mucha idea de como relacionarla de manera foránea con otra tabla, ¿me debo llevar ambos campos?

    Muchas gracias por la respuesta, no soy DBA y estoy acostumbrada a ver las bases de datos en su mayoría con un ID de campo único (incremental o no). Saludos

     

    miércoles, 4 de abril de 2018 23:28

Respuestas

  • La razón de ser de una clave primaria es la de identificar de manera univoca a una fila dentro de la tabla. Bajo ese contexto, ¿identificas a una columna de la tabla que califique a la fila como única?. Si la respuesta es si entonces no necesita de una clave primaria compuesta. Si la respuesta es no, entonces debes componer la clave primaria con mas de una columna que en conjunción califiquen la unicidad de la fila en la tabla. Claro, si implementas una clave primaria compuesta, la referencia de la fila -en otra tabla- (FK) debe componerse por todas las columnas que forman la clave, y esta es una de las razones por la que resulta conveniente el uso de una clave subrogada (por ejemplo un valor auto-numérico), de hecho es un tema muy controversial, ya verás opiniones encontradas con sustentos válidos.

    En lo personal, salvo algún otro caso en particular, yo sólo ocupo una clave primaria compuesta en las tablas de unión (la tabla que permite contener la referencia de dos tablas propio de una relación de muchos a muchos), en las demás tablas, por lo general, ocupo una clave subrogada (IDENTITY/SEQUENCE en SQL Server).

    • Marcado como respuesta Alma Vqz jueves, 5 de abril de 2018 14:59
    jueves, 5 de abril de 2018 0:02
  • No hay una norma o una situación en la que siempre se haga de una forma o de la otra.

    El tema del diseño de bases de datos siempre genera discusión, como bien dice willams.

    He leído en diagonal este artículo y creo que te puede servir aunque me da que el que lo escribió no es "muy dba". por que habla de los guids como una alternativa válida para crear esa clave subrogada y definitivamente guids=suicidio del rendimiento

    https://bmegias.wordpress.com/2011/01/31/¿claves-primarias-naturales-o-subrogadas/

    En la mas pura teoría las llaves compuestas, son las que realmente tienen sentido, y todas las ventajas que verás que te ofrecen van del hecho de que es la forma natural de hacerlo, se entiende fácil y los datos se propagan entre dependencias.

    Las llaves subrogadas, por el contrario, son un invento y no cumplen esa condición, pero...cuando vamos a hacer un join entre dos tablas en las que has arrastrado la clave subrogada, suele rendir mucho mucho mejor. No voy a entrar en los detalles técnicos de los motivos, pero .. mucho mejor.

    En mis implementaciones me suelo plantear  en conclusión 2 preguntas.

    . Como de importante es el rendimiento en esta tabla

    . En cuantos joins va a participar.

    Si la respuesta a cualquiera de las dos es "mucho", uso claves subrogadas, pero... me llevo también las claves de negocio a las tablas relacionadas (una especie de desnormalización)

    Saludos


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta Alma Vqz jueves, 5 de abril de 2018 14:59
    jueves, 5 de abril de 2018 10:52
    Moderador

Todas las respuestas

  • La razón de ser de una clave primaria es la de identificar de manera univoca a una fila dentro de la tabla. Bajo ese contexto, ¿identificas a una columna de la tabla que califique a la fila como única?. Si la respuesta es si entonces no necesita de una clave primaria compuesta. Si la respuesta es no, entonces debes componer la clave primaria con mas de una columna que en conjunción califiquen la unicidad de la fila en la tabla. Claro, si implementas una clave primaria compuesta, la referencia de la fila -en otra tabla- (FK) debe componerse por todas las columnas que forman la clave, y esta es una de las razones por la que resulta conveniente el uso de una clave subrogada (por ejemplo un valor auto-numérico), de hecho es un tema muy controversial, ya verás opiniones encontradas con sustentos válidos.

    En lo personal, salvo algún otro caso en particular, yo sólo ocupo una clave primaria compuesta en las tablas de unión (la tabla que permite contener la referencia de dos tablas propio de una relación de muchos a muchos), en las demás tablas, por lo general, ocupo una clave subrogada (IDENTITY/SEQUENCE en SQL Server).

    • Marcado como respuesta Alma Vqz jueves, 5 de abril de 2018 14:59
    jueves, 5 de abril de 2018 0:02
  • No hay una norma o una situación en la que siempre se haga de una forma o de la otra.

    El tema del diseño de bases de datos siempre genera discusión, como bien dice willams.

    He leído en diagonal este artículo y creo que te puede servir aunque me da que el que lo escribió no es "muy dba". por que habla de los guids como una alternativa válida para crear esa clave subrogada y definitivamente guids=suicidio del rendimiento

    https://bmegias.wordpress.com/2011/01/31/¿claves-primarias-naturales-o-subrogadas/

    En la mas pura teoría las llaves compuestas, son las que realmente tienen sentido, y todas las ventajas que verás que te ofrecen van del hecho de que es la forma natural de hacerlo, se entiende fácil y los datos se propagan entre dependencias.

    Las llaves subrogadas, por el contrario, son un invento y no cumplen esa condición, pero...cuando vamos a hacer un join entre dos tablas en las que has arrastrado la clave subrogada, suele rendir mucho mucho mejor. No voy a entrar en los detalles técnicos de los motivos, pero .. mucho mejor.

    En mis implementaciones me suelo plantear  en conclusión 2 preguntas.

    . Como de importante es el rendimiento en esta tabla

    . En cuantos joins va a participar.

    Si la respuesta a cualquiera de las dos es "mucho", uso claves subrogadas, pero... me llevo también las claves de negocio a las tablas relacionadas (una especie de desnormalización)

    Saludos


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta Alma Vqz jueves, 5 de abril de 2018 14:59
    jueves, 5 de abril de 2018 10:52
    Moderador
  • Gracias Willams, me has ayudado a aclarar conceptos.
    jueves, 5 de abril de 2018 14:59
  • Miguel, muy completa tu respuesta me ha servido de mucho.

    Saludos!

    jueves, 5 de abril de 2018 15:00