Tengo una tabla de Producers
y una tabla de Products
, ambos de la forma:
Id
- int, clave principalName
- nvarchar
Un productor puede transportar múltiples productos, por lo que iba a crear una tabla llamada ProducerDetails
que tendría:
ProducerId
- int, clave externa paraProducers.Id
ProductId
- int, clave externa paraProducts.Id
Entonces comencé a cuestionarme, así que pensé en preguntar a los expertos. ¿Sería mejor diseñar una base de datos para tener una Id
columna adicional (int, Clave primaria) en mi ProducerDetails
tabla? ¿O es eso innecesario?
Estoy usando SQL-Server 2008 R2 si eso hace alguna diferencia.
EDITAR : creo que la relación entre estas tablas sería de muchos a muchos, lo siento, no lo dejé claro. Un productor puede transportar múltiples tipos de productos, y el mismo producto podría ser producido por múltiples productores diferentes.
Pido disculpas si esta pregunta es demasiado simple, el diseño de integridad / base de datos referencial no es mi fuerte (aunque estoy tratando de mejorar eso).
fuente
id
campo en su tabla de relaciones?ProductId, ProducerId
es una combinación única, no veo la necesidad de agregar otra clave artificial a la tabla Unir. ¿Convenido? Y creo que, a menos que esté malinterpretando la pregunta, el OP ni siquiera necesita usar una tabla Join para este caso de uso.No, no hay ningún valor en agregar una "clave primaria" adicional a esta tabla. Sus uniones solo se referirán a
ProducerID
yProductID
, por lo que es solo un peso muerto. EN MI HUMILDE OPINIÓN.Aunque estoy de acuerdo con @Shark en que la tabla de unión ni siquiera parece ser necesaria aquí, a menos que haga todo lo posible para no cambiar el esquema de las tablas existentes de ninguna manera.
Por otro lado, también creo que vale la pena nombrar su identificador principal en su totalidad (por ejemplo, en
Products.ProductID
lugar deProducts.ID
) para que el identificador se nombre constantemente en todo el esquema.fuente
ProductID
). Una ventaja es que cuando ve unSometableID
, sabe de inmediato a qué tabla se refiere. Otra es que puede usar laProduct JOIN ProducerDetail USING(ProductID)
sintaxis, en lugar de la más largaProduct JOIN ProducerDetail ON Product.ID = ProducerDetail.ProductID
USING(ProductID)
no está disponible en SQL-Server, por lo que ese punto no se aplica.