2010-12-28 7 views
3

Für meine Website erstellen, ich habe TabellenWie eine bessere Tabellen Struktur

Category :: id | name 
Product :: id | name | categoryid 

Jetzt kann jede Kategorie unterschiedliche Größen haben, für die ich auch eine Tabelle

Size :: id | name | categoryid | price 

das Problem nun geschaffen haben, ist dass jede Kategorie auch andere Zutaten hat, die der Kunde wählen kann, um zu seinem gekauften Produkt hinzuzufügen. Und diese Zutaten haben unterschiedliche Preise für verschiedene Größen. Dafür habe ich auch eine Tabelle wie

Ingredient :: id | name | sizeid | categoryid | price 

Ich bin nicht sicher, ob diese Struktur wirklich normalisiert wird. Kann mir bitte jemand helfen, diese Struktur zu optimieren und welche indexierten brauche ich für diese Struktur?

+0

Es kann einfacher sein zu sehen, ob es normalisiert ist oder nicht, wenn Sie eine kleine Menge von Beispieldaten angeben (z. B. zwischen 2 und 5 Beispielzeilen pro Tabelle), die zeigt, wie Sie diese Tabellen in der Praxis verwenden. Dies wird es einfacher machen, mögliche Redundanzen zu erkennen. –

Antwort

0

Kategorie :: id | Name
Produkt :: ID | Name | categoryid
Größe :: id | Name |
Zutat :: ID | Name |
Kategorie_Größe :: ID | Kategorieid | GrößenID | Preis
Kategorie_Ingredient :: id | KategorieID | ZutatenID | Preis

Alle komplexen Einheiten sind in kleinste mögliche Teile zerlegt (einzelne Tabelle). Dann verwendete Fremdschlüsselbeziehungen, um sie logisch zu verbinden.

1

Und diese Zutaten haben unterschiedliche Preise für verschiedene Größen.

Wenn eine Zutat Preis nur von seiner Größe abhängt und nicht auch die Kategorie dann versuchen, diese:

Ingredient :: id | name 

Ingredient_Price :: ingredientid | sizeid | price 

Ingredient_Category :: ingredientid | categoryid 
+0

Danke für die Antwort, können Sie es bitte ein bisschen mehr erklären, warum es besser ist. Danke im Voraus. – user160820

+0

@ user160820: Ich habe die Beziehung zwischen Zutaten und Kategorien von der Beziehung zwischen der Größe einer Zutat und ihrem Preis getrennt. Dies reduziert die Redundanz, wenn der Preis nicht von der Kategorie abhängt. Ich vermeide es auch, den Namen der Zutaten zu duplizieren, was wiederum die Redundanz verringert und Modifizierungsanomalien verhindert: http://en.wikipedia.org/wiki/Database_normalization#Free_the_database_of_modification_anomalies –

0

Struktur aussieht gut zu mir. PK wird indiziert, indem man sie natürlich als PK definiert.
Sie müssen Indizes für alle FKs hinzuzufügen:

product.categoryId, 
size.categoryId, 
ingredient.categoryId, 
ingredient.sizeId 

Je nach Größe Ihrer Tabellen, und auf die Tatsache, dass Sie Elemente möchten alphabetisch angezeigt werden, können Sie auch die Namensfelder zu indizieren alle wollen.

Verwandte Themen