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
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
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
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
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
Lee sobre ese tema en este enlace agiledata.org/essays/keys.html
Saludos
@antoniogarcia78