Beste Datenbankstruktur

jannicars

Erfahrenes Mitglied
Hallo,

Ich stehe gerade vor einer kleinen Frage, wie man eine Datenbanktstruktur für folgenden Fall löst:
Nehmen wir mal als Beispiel an, wir haben 2 Tabellen.
1. Marke: 8.000 Einträge; 2. Auto: 35.000 Einträge
Nun möchte ich für diese beiden Tabellen, also für Marke und Auto ein Kommentarsystem machen. Nun stelle ich mir folgenden Frage:
Soll ich 2 Tabellen für die Kommentare machen oder alle in eine Tabelle reinhauen und dann eben zum Beispiel mit einer Reihe, die sich 'art' nennt unterscheiden.
Ich könnte mir vorstellen, dass das unperformanter ist, alles in eine Tabelle "reinzuquetschen" da man immer mit einem WHERE erstmal die art filtern muss.

Falls es von Bedeutung ist, DBMS ist MySQL.
 

saftmeister

Nutze den Saft!
Ich würde eine Tabelle verwenden und auf die Spalte 'art' einen Index legen. Natürlich könnte 'art' auch auch ein SET oder ENUM sein, damit man nicht ausversehen falsche Werte da rein schreiben kann.

Sobald man einen Index auf eine Spalte macht geht der Such-Malus verloren dafür bekommt man einen INSERT/UPDATE/DELETE-Malus, da bei schreibenden Operationen der Index auf die Tabelle aktualisiert werden muss.

Was die letztendlich lieber ist, musst du selbst entscheiden :)
 

jannicars

Erfahrenes Mitglied
Diesen SET oder ENUM Typ kannte ich noch nicht.
Da mein Script ja eh fertige Werte einträgt, müsste ich da ja nicht so ein Typ definieren?!
Würde wohl eher zu Sicherheit dienen.
Würde es bei einem falschen Wert ein MySQL Error werfen?
 

saftmeister

Nutze den Saft!
Ja, am besten du nimmst ENUM und trägst bei "Länge/Werte" im PHPMyAdmin deine Typen ein. Als single-quoted Strings durch Komma getrennt. Wie im Anhang, so ungefähr.

MySQL wird einen Fehler werfen, wenn du versuchst, was anderes einzutragen. Zugegeben, die Fehlermeldung ist nicht sehr aufschlussreich: "#1265 - Data truncated for column 'art' at row 1".

Hier zum Nachvollziehen.

Code:
CREATE TABLE `test`.`kommentare` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`art` ENUM( 'Marke', 'Auto' ) NOT NULL DEFAULT 'Marke'
);

-- Und zum Testen:
-- INSERT INTO kommentare( art )
-- VALUES (
-- 'test'
-- );

Wie man einen Index anlegt, kannst du ja selbst probieren, wenn du es noch nicht weißt :)
 

Anhänge

  • pma_enum.example.png
    pma_enum.example.png
    15,2 KB · Aufrufe: 8

jannicars

Erfahrenes Mitglied
Ok, danke dir!
Und ja, ich weiß wie Indexe anlegen geht; beschleunigt eine Tabelle mit ~1.000.000 Einträgen ordentlich ;)
Aber irgendwie finde ich, das meine Hauptfrage noch nicht gelöst ist:
Tabelle aufsplitten oder alles in eine?
Ich lege mehr Priorität auf die Geschwindigkeit.
 
Zuletzt bearbeitet: