Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Claves primarias en las entidades

9 de marzo de 2014

Hola Javier, me gustaría saber el motivo por el que todas las entidades de tu aplicación Cupón son fuertes en el modelo E-R y por tanto definen una clave primaria propia, evitando el uso de claves compuestas, ¿Es por no crearlas a mano y hacerlo con el generador automático de Symfony2? ¿No sería una mala práctica o está igual de correcto definir una id propia por entidad?

Un saludo


Respuestas

#1

En realidad, no todas las entidades tienen una clave primaria simple basada en el id. La entidad Venta tiene una clave primaria compuesta formada por las propiedades $oferta y $usuario`:

Ver código de la entidad Venta.php

El motivo por el que lo hice así es que me parece la forma más eficaz de hacerlo en una aplicación pequeña. Respecto a si es una mala práctica, sinceramente no tengo argumentos de peso ni a favor ni en contra. ¿Podrías explicar un poco más por qué te parece una mala práctica hacerlo así?

@javiereguiluz

9 marzo 2014, 13:52
#2

Cierto se me olvidó esa entidad. En mi opinión, entiendo que crear artificialmente la clave primaria de una entidad tiene la gran ventaja de la sencillez en el diseño de la base de datos (evitas la complejidad o la problemática que podría tener definir claves compuestas) pero por contra puede parecer que se desvirtúa su construcción lógica en cuanto a que se añaden variables artificiales innecesarias. Pero precisamente por eso te preguntaba, realmente desconozco si es una práctica habitual crear atributos para definir la clave primaria en una BD.

@Jorge_Gante

9 marzo 2014, 14:44
#3

He estado buscando referencias fiables sobre el tema y apenas he encontrado nada. Por ejemplo en la discusión Why is naming a table's Primary Key column Id considered bad practice? nadie es capaz de responder con argumentos de peso por qué es una mala práctica el uso de columnas id.

De hecho, en la misma discusión mucha gente le responde que el uso de columnas id es una buena práctica. Además, esta práctica está tan extendida que la mayoría de programas, frameworks, librerías, libros, tutoriales, etc. asumen que siempre se utiliza una columna id como clave primaria de cada tabla.

@javiereguiluz

9 marzo 2014, 15:41
#4

Gracias por la búsqueda de respuestas. Me planteo esto porque estaba diseñando una BD y cuando diferenciaba entre entidades fuertes y débiles me pregunté el sentido de hacerlo cuando realmente todas podían ser entidades fuertes.

Teniendo en cuenta que una entidad débil es "aquella que no puede ser unívocamente identificada solamente por sus atributos", si en todas las entidades creásemos un id como clave primaria, sólo existirían entidades fuertes y no haría falta más. Eso sí, es necesario añadir las claves foráneas de otras entidades para establecer la relación entre ambas, pero no únicamente por establecer la clave primaria compuesta de la entidad débil.

@Jorge_Gante

9 marzo 2014, 17:25
#5

Lee sobre ese tema en este enlace agiledata.org/essays/keys.html

Saludos

@antoniogarcia78

11 marzo 2014, 11:32