Ir al contenido



Foto

Primary Key Obligatoria... si o no ?


  • Por favor identifícate para responder
7 respuestas en este tema

Encuesta: ¿Es recomendable el uso de una PK en todas las tablas de una BD? (8 miembros han emitido voto)

¿Es recomendable el uso de una PK en todas las tablas de una BD?

  1. Si (7 votos [87.50%])

    Porcentaje de voto: 87.50%

  2. No (1 votos [12.50%])

    Porcentaje de voto: 12.50%

  3. Depende de la BD (0 votos [0.00%])

    Porcentaje de voto: 0.00%

  4. No sé (0 votos [0.00%])

    Porcentaje de voto: 0.00%

Votar Los invitados no pueden votar

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 11 septiembre 2014 - 11:32

Hola a todos !

Coloco aquí este tema porque en realidad no tiene que ver con una duda con respecto a un motor de una base de datos si no con todas, o con la teoría general sobre BD.

Hace poco tuve una "discusión" con un compañero de clases porque yo sostengo que es importante que todas las tablas que conforman una BD relacional tengan, de manera forzosa, al menos un campo llave. Él me decía que no era necesario. Que si la tabla por definición no necesitaba un campo llave como tal, era mejor no ponerla (ponía como ejemplo una tabla que relacionaba una cardinalidad m:n).

Mi pregunta es: ustedes qué opinan ???  8-|

Saludox ! :)
  • 0

#2 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 591 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 11 septiembre 2014 - 11:53

si bien son el ABC de la teoria de base de datos, a mi siempre me traen problemas  ^o| por lo que trato de no usarlas. Esto me lleva a escribir un poco más de código en algun casos.
En tablas con más de 50000 filas no tengo demoras significativas en consultas SQL. Por lo memos en las que considero que esta casi bien el diseño de la bdd.

Tal vez alguien haya comparado el rendimiento con y sin pk.

:)
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.983 mensajes
  • LocationArgentina

Escrito 11 septiembre 2014 - 11:56

Quziá el foro más apropiado sea Encuestas;)

Pues a como lo veo yo, toda tabla requiere de un campo que haga de clave primaria. Sea esta una artificial o no.
Y sobre todo si resulta que la tabla estará vinculada a otra.
Hasta la tabla intermedia, que hace de puente en una relación (M:M) posee una clave.

El álgebra relacional da a entender en este punto. Sin clave primaria no hay clave foránea... y sin ambas chau relaciones y a trabajar a los vuelos y tener que administrar por nuestra propia cuenta los mecanismos que permitan llevar una relación entre los registros de una a otra.

Toda tabla tiene su clave, distinto es que ésta sea explícita. En ocasiones no la vemos, y en otras se necesita de una clave artificial. Por ejemplo el DNI es una clave potencial de interés que permite identificar inequívocamente a cada persona. No existe técnicamente el concepto de DNI, es una abstracción que el ser humano concibió. Y como tal luego hemos adoptado.
Aún hoy se debate si el DNI debe ser considerado una clave primaria, el sólo hecho de ser clave artificial para ciertos "académicos" parece darles comezón. Yo hasta el momento no he visto una clave primaria que no sea artificial, no entiendo el porqué esa sensación de que hay que evitar las claves artificiales.

Saludos,
  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 11 septiembre 2014 - 01:26

Quziá el foro más apropiado sea Encuestas;)
.....


Muy bien, ya he colocado el tema en Encuestas con sus respectivas opciones para que voten  :ap:  :D :D :D :D

Les agradezco sus opiniones y veamos qué dicen los demás  (y)

Saludox ! :)
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 11 septiembre 2014 - 01:31

Mi razón básica por la que opino que sí es importante que todas la tablas cuenten con una PK (como mínimo) es que hay trabajo que el motor de la base de datos ya realiza sin que sea necesario que nosotros nos preocupemos por ello (la duplicidad de registros únicos como ejemplo básico).

Me parece poco práctico y susceptible a errores el hecho de que se maneje "manualmente" algo que es claramente trabajo del motor, vaya !, no le quitemos su chamba  :D :D :D

Saludox ! :)
  • 0

#6 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 11 septiembre 2014 - 04:22

Desde mi punto de vista, o como yo suelo definir algunas tablas no.
Doy un ejemplo sencillo:
Cabecera de venta y detalle de venta (o detalle de factura).
Mientras que la cabecera necesita obligatoriamente una PK (más allá del número de factura que es otra cosa), para poder relacionar los detalles de venta a la cabecera. Pero desde el sentido contrario, es decir los detalles no necesitan una PK, obviamente sí una FK.
Se supone que el rendimiento es mayor, pero en determinados casos, ya que comúnmente se deshabilitan las claves para obtener mejores resultados.
Por otra parte, el hecho que una tabla siempre requiera una PK, implica [forzosamente] el uso de claves artificiales (que campos artificales, de hecho) lo que aumenta su complejidad, espacio necesario, etc.


  • 0

#7 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 510 mensajes
  • LocationCali, Colombia

Escrito 11 septiembre 2014 - 06:59

Hola,  desde mi punto de vista es un SI rotundo, es obligatoria.

Las bases de datos están diseñadas con base en el ALGEBRA RELACIONAL y en ella está claro el uso obligatorio de llave primaria.

Ahora la pregunta es para que sirve?  Hay herramientas de desarrollo (Delphi por Ejemplo) que en su concepción asumen que las bases datos conservan las directivas del ALGEBRA RELACIONAL, así que todas sus librerías, funcionalidades y herramientas, están diseñadas de esa forma y por lo tanto todos hablan el mismo idioma.  Esto es solo para que las aplicaciones sean fáciles de desarrollar y así puedas emprender proyectos de gran calibre.

Pero hay otras herramientas de desarrollo que piensan que lo único que necesitan de una base de datos es la conexión y la ejecución de Sql's,  como PHP por ejemplo.  en este caso la Base de datos puede ser como quieran, que al final todo toca hacerlo a mano o utilizar librerías de terceros que faciliten el trabajo pero igual estas librerías hacen todo a mano.

Llevo más de 20 años de experiencia programando sobre bases de datos, en muchos motores, incluyendo Oracle, DB2, Postgres, Interbase, MySql, SqlServer, y he desarrollado un motor de base de datos jerárquico para el manejo de Data Warehouse y puedo decir con certeza que una base de datos con diseño que respete al menos los 3 primeros niveles de normalización es necesaria para trabajar con lenguajes realmente de bases de datos, de lo contrario los tiempos de desarrollo son enormes, el esfuerzo se incrementa y el tamaño de los proyectos que se pueden realizar son limitados, sino pequeños.

Nota: Para evitar herir susceptibilidades, esta es solo mi opinión, no espero que estén de acuerdo con ella, pero evalúa cuan grandes han sido tus aplicaciones, en número de usuarios (más de 200? para una aplicación), cuan grande la base de datos (más de 40 Gb, 1 TB?), cuan grande la tabla más grande (más de 10 millones de registros?).  allí es donde realmente se ve la importancia de un buen diseño y hay que comenzar a hilar delgado en cada decisión con respecto a la BD.

Todavía no he trabajado con las bases de datos "BigData" o no estructuradas, pero estoy seguro que cuando lo haga buscaré una herramienta de desarrollo que tenga un buen soporte sobre ese tipo de bases de datos (No hablo solo de la conexión, que de esas hay bastantes).

Saludos.


  • 0

#8 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 507 mensajes
  • LocationEspaña

Escrito 12 septiembre 2014 - 02:58

Iba a decir lo mismo que se ha adelantado Gustavo.

Coincido plenamente

Saludos
  • 0