meine erste MySQL-DB ausverbessern?! Tipps?

nekyl

Mitglied
Hallo! hab gerad testweise meine erste MySQL datenbank für eine Demo-Webshop für eine Lehrveranstaltung per phpmyadmin erstellt. Kann mir denn bitte jemand sagen, ob die halbwegs brauchbar ist und sogar bissl ausverbessern?! Datenbank ist im Anhang! Vielen Dank im Voraus!

Ach ja noch was: wenn ich in Ubuntu im Terminal mysql -h localhost -u root -p eingebe bekomme ich eine Fehlermedlung. Die lautet: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'. hab auf dem Rechner XAMPP installiert und läuft alles. nur wenn ich das mysql monitor sehen will, kommt dieser fehler! hab dann versucht über apt-get install mysql-server zu installieren. es ist gegangen und dann ich kann auch zu mysql monitor sehen. aber dann bei XAMPP funktioniert mein MySQL nicht bzw. phpmyadmin auch net! Bitte um Lösung!
 

Anhänge

Zuletzt bearbeitet:
Hi du,

ich hab grad nicht allzuviel Zeit, deshalb kann ich dir jetzt keine konkreten Verbesserungsvorschläge machen.

Erstmal soviel: Es gibt ein paar gute Ansätze. Allerdings auch viele, sehr viele Fehler.

Ich empfehle dir, wenn du dich reinarbeiten möchtest dringend, dich mit den Grundlangen des Datenbank-Designs vertraut zu machen. (Thema Normalisierung, Redundanz, Performance).

Die Datenbank hab ich mir wie gesagt kurz angeschaut, und sie ist sowohl vom logischen Design her als auch in Bezug auf die Entwicklung eines Frontends unbrauchbar.

klang jetzt böser als es gemeint war, sorry dafür.

Gruß Tobi,

P.S.: du musst konkretere Fragen stellen, dann kann man dir im Einzelfall auch schneller und besser helfen. Wenn du welche hast, her damit.
 
Danke für ehrliche Antwort! aber jetzt z.B welche Tabelle soll ich den hineinfügen damit es doch bisschen sinnvoller wird? Wie sollen die z.B ausschauen?
 
Ich hab da auch mal einige Punkte zusammengetragen. Ich schreibe einfach mal ganz direkt ohne Blumen was ich auf die schnelle sehe.

item: Viel Redundanz.
zB. die Tabelle bestellte_produkte. Die braucht keine Kundeninformationen. Welcher Kunde es ist, steht schon in der Bestellung. Also alles was mit Kunden zu tun hat gehört da raus.
preis hast du schon im Produkt, gehört da raus ausser du änderst die Preise dauernd.

item: Du hast Felder die mehr Details enthalten als die Tabelle eigentlich hat.
z.B Tabelle bestellung. die 2 Felder produkt_id und anzahl haben da doch nix verloren. Das sind BEstandteile von bestellte_produkte

item: Du hast Daten die zusammengehören in versch. Tabellen ausgelagert.
zB. Tabelle lieferung. Diese Information gehört zu bestellung. ausser du arbeitest mit Teillieferungen - das ist dann aber schnell mal kompliziert.
zB. Tabelle registrierte_kunden. Diese Informationen gehören zm Kunde. Es macht wenig Sinn diese auszulagern.

item: Die Tabelle warenkorb. Das ist Bestandteil der Tabelle bestellung. Die Infos hast du dort ja. Du kannst den Enum vom Feld lieferungsstatus um 'warenkorb' ergänzen.
 
Tabellen die ich ( man kanns auch anders machen) wären z.B.:

Anrede(ID,Bez_deDE,Bez_enGB)
Zahlungsart(ID, BEZ, Field1, Field2,...)
Land(ID,BEZ,Praefix_Tel, Suffix_Adr,...)
Lieferanten(ID,Field1,Field2,...)
Artikelgruppe(ID,Bez)
etc.
etc.
etc....

Dann gehört der Preis nicht in den Artikelstamm... warum gibt es bei bestellte_produkte die spalte kundenid, wenn doch das bestellte Produkt der Bestellung zugewiesen wird, die schon den Kunden_ID fremdschlüssel hat? Wie ordnest du Warenkörbe benutzern zu, welche artikel sind im warenkorb, wie wird der Inhalt des WArenkorbs zur Bestellung? Warum hat ne Bestellung ne Lieferadresse, und die Lieferung eine Lieferadresse? etc etc etc. ;)
 
Moin nekyl,

In den Tabellenstruktur(entwürf)en sind neben einigen banalen Fehlern unterschiedlicher unfreiwilliger Komik wie z.B.
SQL:
...
--
-- Tabellenstruktur für Tabelle `produkt`
--

CREATE TABLE IF NOT EXISTS `produkt` (
  `produkt_id` int(11) NOT NULL AUTO_INCREMENT,
  `produkt_art` enum('Damen','Herren') NOT NULL,
  `produkt_nr` varchar(30) NOT NULL,
....

....auch zwei wiederkehrende grundsätzliche (Planungs-)Fehler.

* Schlüsselfelder, die eine logische und auch eine rein handwerkliche Verknüpfung der Tabellen ermöglichen könnten, sind von den Datentypen her unterschiedlich - oder- sind in mehreren Tabellen unabhängig voneinander als AUTO INCREMENT definiert (z.b Kunden-id)
* und zweitens sollten nicht nur Felder vorhanden sein, die eine tabellenverknüpfung ermöglichen - es sollte auch über FOREIGN KEY-Constraints der Datenbankengine verbindlich miz auf den Weg gegeben werden.

Diese beiden angesprochenen Fehler kannst du dir auch als Einsteiger allein vornehmen - alle für Suchmaschinen oder die mySQL-Referenz nötigen Stichworte/Suchbegriffe habe ich in meinem Kommentar eingebaut.

Einen überarbeiteten Tabellenentwurf 2.0 schau ich mir gerne in ein Tagen wieder an, wenn du dich mit dem Thema auseinandergesetzt hast.

Grüße
Biber
 
item: Die Tabelle warenkorb. Das ist Bestandteil der Tabelle bestellung. Die Infos hast du dort ja. Du kannst den Enum vom Feld lieferungsstatus um 'warenkorb' ergänzen.
Danke für hilfreiche Antwort! hab die tabellen entsprechend optimiert, wie du geschrieben hast. aber was meinst du um warenkorb ergänzen? Etwas genauer?

@ Biber2: Danke für Antwort! Was meinst du mit dem 1. fehler, also was hat die tabelle produkt an sich falsch? Wie kann ich das noch optimieren?
 
Zuletzt bearbeitet:
um warenkorb erweitern.
Damit meine ich in der Tabelle bestellung das folgnede Feld
SQL:
`lieferungsstatus` enum('bestellt','bearbeitet','gesendet') NOT NULL
--erweitern zu
`lieferungsstatus` enum('warenkorb','bestellt','bearbeitet','gesendet') NOT NULL
So hast du auch einen Status für noch nicht bestellte Bestellungen (also den Warenkorb)
 
Moin nekyl,

mit dem kleinen Schmunzelfehler in der Produkt-Tabelle meinte ich nur die enum-Werte in der Source-Zeile 08.

Ansonsten kamen schon genug gute Tipps, aber wie du sehen kannst auch unterschiedliche Stile und "Standards".
Da bringt es dir nichts, wenn sich fünf verschiedene Köche um deinen Brei kümmern.
Überflieg einmal die ganzen Ratschläge, mach dann den Browser zu und schrote dir ein Datenmodell version 0.2 zusammen.
Und darüber können wir dann wieder gemeinsam diskutieren.

Grüße und schönes Wochenende
Biber
 
So Leute, hab in letzter Zeit leider kaum mehr Zeit gehabt, mit den datenbanken richtig zu beschäftigen. Dennoch hab ich versucht, die DB etwas zu optimieren sprich, die Anmerkungen eurerseits zu berücksichtigen. Ich freue mich auf Eure Vorschläge und Tipps!
 

Anhänge

Zurück