2016-06-02 6 views
1

Ich muss eine Datenbank-Anwendung mit vielen Daten erstellen. Jetzt brauche ich ein gutes Tabellen-/Datenbank-Design. Ich habe zwei im Kopf, aber ich bin offen für neue. Erstens: Das ist etwas Ähnliches wie die Daten muss ich sparen:Welche MySQL-Tabelle Design ist besser auf die Leistung?

Nahrung: Beef

Enthält:

Brom: Prozent: 12% /// Gramm: 0,23

Uran: Prozent: 1% /// Gramm: 0,003

Gold: Prozent: 0,03% /// Gram: 0.02

und so weiter

Jetzt habe ich zwei Entwürfe in Sicht im Moment:

Für jedes Element (Brom, Gold, ...) Ich habe eine Tabelle wie "brom_tbl, gold_tbl" erstellen und eine Tabelle, in der der Name und eine globale ID angezeigt werden (gbl_tbl). Wenn ich dann alle Daten lesen will, schließe ich mich einfach an.

Hier ist das zweite:

ich nur eine Tabelle wie folgt aussehen haben:

Name | brom_percent | brom_gram | gold_percent | gold_gram | ...

Rindfleisch | 12 | 0,23 | 0,03 | 0.02

Und dann würde ich einfach alles lesen.

Wäre nett, wenn Sie mir sagen könnten, was schneller oder besser ist.

Thanks :)

+4

Verwenden Sie eine Tabelle. Und verwende keine Namen wie 'gbl_tbl', es ist nicht MS-DOS. – C14L

+0

Ok, danke. Haben Sie Tipps zum Benennen von Tabellen? Oder sollte ich es einfach "gbl" lassen? – DisplayName123

+3

Soll "gbl" "global" bedeuten? Dann nenne es "global", wenn das Sinn macht. Besser noch, Name, wenn "food_metal_content" oder was auch immer die Tabelle ist. Damit in 10 Jahren, wenn jemand Ihre (dann 100 verschiedenen) Tabellen durchsucht, werden Sie in der Lage sein, den richtigen zu finden. Es besteht keine Notwendigkeit, kryptische Programme zu verwenden. – C14L

Antwort

0

Was ist mit zwei Tabellen wie folgt zu erstellen:

One für das Essen ..

create table Food 
(
FoodId INT NOT NULL AUTO_INCREMENT, 
Name varchar(1000) 
) 

und eine für die Attribute:

create table Attributes 
(
    AttributeId INT NOT NULL AUTO_INCREMENT, 
    Description varchar(1000), 
    FoodId  INT, /* Referencds FoodId in Food table */ 
    Value  Decimal, 
    FOREIGN KEY (FoodId) 
     REFERENCES Food(FoodId) 
) 

Sie könnte eine Attributtabelle mit den Namen der Attribute und anderen Werten wie Beschreibung erstellen, chemisches Symbol zum Beispiel.

Und dann haben Sie eine FoodAttribute-Tabelle mit einem Datensatz für jedes Essen/Attribut-Paar .. eine klassische Viele-zu-Viele-Verbindung.

+0

Warum würden Sie 3 Schichten von Referenzen erstellen? macht die Struktur unnötig kompliziert und dauert länger, um nach OPs "vielen Daten" zu fragen. Ich bezweifle, dass sie oft ein bisher unbekanntes Metall in Rindfleisch finden. – C14L

+0

Danke, aber ich würde brauchen eine einzelne Tabelle nur für 'FoodId' und' Name'? Ich denke, es wäre egal, wenn ich sie zusammenführen würde. – DisplayName123

+0

@ c14L was ist, wenn ein Lebensmittel kein bestimmtes Metall enthält ... also hast du für jedes Mineral einen Tisch mit einer Säule vorgeschlagen? das wird schneller sein? Ich bin kein Experte für MySQL, aber das fliegt ein wenig gegen den Wind, oder? –

0

Die straghtforward Design ist

-- food FOOD has element ELEMENT associated with PERCENT percent and GRAMS grams 
Food(food, element, percent, grams) 

Sie erklären nicht mehr, dass würde uns helfen, eine geeignete Gestaltung zu geben. Anscheinend sind die Gewichte der Elemente in den Lebensmitteln.Angenommen, Ihr GRAMS ist das Gewicht eines Elements in einem Standardgewicht von Lebensmitteln und ein bestimmtes Element ist mit einem Standardgewicht pro Standardgewicht von Lebensmitteln verbunden. Dann:

-- standard weight of food FOOD is PERCENT percent element ELEMENT 
Food(food, element, percent) 
-- element ELEMENT has weight GRAMS grams per standard weight of food 
Weight(element, grams) 

Dann ist der Wert der vorhergehenden Tabelle eine Funktion dieser Tabellenwerte.

Sie müssen das Prädikat/die Bedeutung für Ihre Tabelle (s) (ausgedrückt durch obige Kommentare) deutlich genug ausdrücken, damit ein Benutzer die aktuelle Situation sehen und wissen kann, welche Werte in Ihre Tabelle (n) eingegeben werden sollen. .