J'ai un tableau de Producers
et un tableau de Products
, qui sont tous les deux de la forme:
Id
- int, clé primaireName
- nvarchar
Un producteur peut transporter plusieurs produits, donc j'allais créer une table appelée ProducerDetails
qui aurait:
ProducerId
- int, clé étrangère versProducers.Id
ProductId
- int, clé étrangère versProducts.Id
Puis j'ai commencé à me poser des questions, alors j'ai pensé demander aux experts. Serait-il préférable de concevoir une base de données pour avoir une Id
colonne supplémentaire (int, clé primaire) dans ma ProducerDetails
table? Ou est-ce inutile?
J'utilise SQL-Server 2008 R2 si cela fait une différence.
EDIT - La relation entre ces tables serait plusieurs à plusieurs je crois, désolé de ne pas l'avoir précisé. Un producteur peut transporter plusieurs types de produits et le même produit peut être fabriqué par plusieurs producteurs différents.
Je m'excuse si cette question est trop simple, l'intégrité référentielle / la conception de base de données n'est pas mon point fort (bien que j'essaie d'améliorer cela).
la source
id
champ dans sa table de relation?ProductId, ProducerId
s'agit d'une combinaison unique, je ne vois pas la nécessité d'ajouter une autre clé artificielle à la table Join. D'accord? Et je pense qu'à moins que je ne comprenne mal la question, l'OP n'a même pas besoin d'utiliser une table Join pour ce cas d'utilisation.Non, il n'y a aucune valeur à ajouter une "clé primaire" supplémentaire à ce tableau. Votre jointures ne sont jamais à se référer à
ProducerID
etProductID
, donc il est juste poids mort. A MON HUMBLE AVIS.Bien que je convienne avec @Shark que la table de jointure ne semble même pas nécessaire ici, à moins que vous ne fassiez tout votre possible pour ne pas modifier le schéma des tables existantes de quelque manière que ce soit.
En passant, je pense également qu'il vaut la peine de nommer votre identifiant principal en entier (par exemple
Products.ProductID
au lieu deProducts.ID
) afin que l'identifiant soit nommé de manière cohérente dans tout le schéma.la source
ProductID
). Un avantage est que lorsque vous voyez unSometableID
, vous savez immédiatement à quel tableau il se réfère. Un autre est que vous pouvez utiliser laProduct JOIN ProducerDetail USING(ProductID)
syntaxe, au lieu de la plus longueProduct JOIN ProducerDetail ON Product.ID = ProducerDetail.ProductID
USING(ProductID)
n'est pas disponible dans SQL-Server, donc ce point ne s'applique pas.