Ich erstelle einen Online-Marktplatz für Käufer und Verkäufer. Eine der Fragen an Verkäufer ist: "Akzeptieren Sie Produktrückgaben?" Wenn ja, ist die zweite Frage "Wer zahlt für den zurückgegebenen Artikel: der Käufer oder der Verkäufer?"MySQL Normalisierung vs Denormalisierung
Ich gehe immer für normalisierte Designs in der Regel. So würde entwerfen ich in der Regel die Datenbank wie folgt mit einem Artikel Tisch und ein return_payers Tabelle und verwenden Sie einen Join:
items
id | title | description | price | returns_accepted |
------------------------------------------------------------
1 | blah | blah blah | 80.00 | 0 // No
2 | blah | blah blah | 120.00 | 1 // Yes
3 | blah | blah blah | 40.00 | 1
4 | blah | blah blah | 60.00 | 0
return_payers
id | item_id | payer
--------------------------------
1 | 2 | 1 //Buyer
2 | 3 | 2 //Seller
Aber weil es nur ein Extra an Information Ich denke, ich könnte einfach anhängen eine zusätzliche Spalte mit den Produkten wie so, die Beschleunigung die Notwendigkeit einer Verknüpfung und möglicherweise reduzieren Lesezeit:
products
id | title | description | price | returns_accepted | returns_payer
----------------------------------------------------------------------------
1 | blah | blah blah | 80.00 | 0 | NULL
2 | blah | blah blah | 120.00 | 1 | 1
3 | blah | blah blah | 40.00 | 1 | 2
4 | blah | blah blah | 60.00 | 0 | NULL
Der Grund, warum ich frage mich ist, weil ich einfach nicht ein Beispiel wie diese haben aber die Produkte haben viele kleine Fragen wie diese, wie ich Haben Sie eine Garantie? ja/nein und wenn ja, wie lange usw. Wenn ich 20 dieser kleinen Fragen sage, würde das normalisierte Design 20 weitere Tabellen mit 20 Joins erfordern, das denormalisierte Design würde eine Tabelle, keine Joins, aber viele NULL-Werte haben.
Da es sich um einen Online-Marktplatz handelt, werden die Tabellen viel mehr gelesen als aktualisiert.
Beratung willkommen. Vielen Dank.
Keines dieser Szenarien ist mehr oder weniger normalisiert als das andere in irgendeiner sinnvollen Weise. Technisch gesehen könnte man sagen, dass der Unterschied zwischen 5NF und 6NF liegt, aber das ist den Aufwand kaum wert. Wer für Retouren bezahlt, ist ein Attribut des Artikels und scheint als Attribut in der Artikeltabelle vollkommen gültig zu sein. Mit Nullen ist nichts verkehrt. –
Warum nicht 0, 1 oder 2 (nicht akzeptiert, Käufer, Verkäufer) – Strawberry
@ Michael-sqlbot Der zweite Entwurf ist eindeutig eine Entnormalisierung des ersten in einem bestimmten sinnvollen idiomatischen SQL-Sinn (mit der linken Verbindung statt der inneren Verbindung). Obwohl es pro Rendite vermutlich einen Zahler gibt, handelt es sich um eine Denormalisierung einer * unnötigen * Normalisierung. Worauf beziehen Sie sich vielleicht? – philipxy