Angenommen, Sie haben eine Datenbank mit einer einzigen Tabelle haben wie ...Soll ich eine Zeichenkettentabelle verwenden, um die Datenbank effizienter zu machen?
---------------------------------------------
| Name | FavoriteFood |
---------------------------------------------
| Alice | Pizza |
| Mark | Sushi |
| Jack | Pizza |
---------------------------------------------
Wäre es platzsparender sein, eine zusätzliche Tabelle „Strings“ genannt zu haben, die Saiten, und ändern Sie die FavoriteFood Spalte eine speichert Index in der String-Tabelle. Im obigen Beispiel sieht "Pizza" so aus, als wäre es zweimal gespeichert, aber mit der zusätzlichen Tabelle scheint es, dass es nur einmal gespeichert wird. Natürlich darf man davon ausgehen, dass es 1.000.000 Zeilen und 1.000 eindeutige Strings statt nur 3 Zeilen und 2 eindeutige Strings gibt.
Edit: Wir wissen nicht, was die FavoriteFoods im Voraus sind: Sie sind vom Benutzer bereitgestellt. Die programmatische Schnittstelle zur String-Tabelle würde so etwas wie ...
String GetString(int ID) { return String at with Row-ID == ID }
int GetID(String s) {
if s exists, return row-id;
else {
Create new row;
return new row id;
}
}
So ist die String-Tabelle effizienter scheint, aber moderne Datenbanken bereits tun, dass im Hintergrund, so kann ich tun, nur die einfache Tabelle angehen und effizient sein?
Vorausgesetzt, es gibt keine Hilfsdaten mit den Lebensmitteln zugeordnet (z. B. Ernährungsinformationen), dann ist sein Design bereits in 3NF. Nicht jedes Bit von wiederholten Daten muss eine ganze Zahl sein, um eine korrekt normalisierte Datenbank zu haben. –
@Tyler McHenry: Ich habe es nicht gesagt, oder? Ich habe darauf hingewiesen, dass Design wichtiger ist als die Optimierung eines Leistungsproblems, das Sie nicht haben. –
Ich würde sagen, dass der beste Grund, in diesem Fall mit nicht normalisierten Daten zu gehen, einfach darin liegt, dass es sich um vom Benutzer eingegebene Daten handelt. Es wird schwierig sein, sie dazu zu bringen, ihre bereits eingegebene Saite in den 1000 Saiten zu finden, die bereits eingegeben wurden. Sie werden sowieso mit 6 verschiedenen Variationen von jedem Ding enden, weil Benutzer originell sein wollen und sagen, dass sie Peperoni-Pizza mögen, oder Pizza mit nur Käse, oder Pizza mit 6 Arten von Fleisch darauf. Obwohl Pizza einfach ausreichen würde, bekommt man 6 verschiedene Arten von Pizza, also hat es keinen Sinn, sie zu normalisieren. – Kibbee