Ich habe eine Tabelle von Producers
und eine Tabelle von Products
, die beide die Form haben:
Id
- int, PrimärschlüsselName
- nvarchar
Ein Produzent kann mehrere Produkte führen, daher wollte ich eine Tabelle mit dem Namen erstellen ProducerDetails
, die Folgendes hätte:
ProducerId
- int, Fremdschlüssel zuProducers.Id
ProductId
- int, Fremdschlüssel zuProducts.Id
Dann fing ich an, mich selbst zu befragen, also dachte ich, ich würde die Experten fragen. Wäre es besser, eine zusätzliche Id
Spalte (int, Primärschlüssel) in meiner ProducerDetails
Tabelle zu haben? Oder ist das unnötig?
Ich verwende SQL-Server 2008 R2, wenn dies überhaupt einen Unterschied macht.
BEARBEITEN - Die Beziehung zwischen diesen Tabellen wäre viele zu viele, glaube ich. Tut mir leid, dass ich das nicht klargestellt habe. Ein Hersteller kann mehrere Arten von Produkten führen, und dasselbe Produkt kann von mehreren verschiedenen Herstellern hergestellt werden.
Ich entschuldige mich, wenn diese Frage zu einfach ist. Referenzielle Integrität / Datenbankdesign ist nicht meine Stärke (obwohl ich versuche, das zu verbessern).
quelle
id
Feld in seiner Beziehungstabelle zu haben.ProductId, ProducerId
es sich um eine eindeutige Kombination handelt, muss der Join-Tabelle kein weiterer künstlicher Schlüssel hinzugefügt werden. Einverstanden? Und ich denke, wenn ich die Frage nicht falsch verstehe, muss das OP für diesen Anwendungsfall nicht einmal eine Join-Tabelle verwenden.Nein, das Hinzufügen eines zusätzlichen "Primärschlüssels" zu dieser Tabelle hat keinen Wert. Ihre Joins beziehen sich immer nur auf
ProducerID
undProductID
, es ist also nur Eigengewicht. MEINER BESCHEIDENEN MEINUNG NACH.Obwohl ich @Shark zustimme, dass die Join-Tabelle hier nicht einmal benötigt zu werden scheint, es sei denn, Sie geben sich alle Mühe, das Schema der vorhandenen Tabellen in keiner Weise zu ändern.
Abgesehen davon halte ich es auch für sinnvoll, Ihren primären Bezeichner vollständig zu benennen (z. B.
Products.ProductID
anstelle vonProducts.ID
), damit der Bezeichner im gesamten Schema konsistent benannt wird.quelle
ProductID
). Ein Vorteil ist, dass Sie, wenn Sie eine sehenSometableID
, sofort wissen, auf welche Tabelle sie sich bezieht. Eine andere ist, dass Sie dieProduct JOIN ProducerDetail USING(ProductID)
Syntax anstelle der längeren verwenden könnenProduct JOIN ProducerDetail ON Product.ID = ProducerDetail.ProductID
USING(ProductID)
ist in SQL-Server nicht verfügbar, daher gilt dieser Punkt nicht.