Probleme Beim Datenbankdesign

matzseesi

Erfahrenes Mitglied
Hi Leute

Also ich möchte meine Website mit einer Userverwaltung etwas aufpeppen!
Dazu habe ich eine Datenbank (MySQL) und eben PHP im Einsatz!

Sodala jetzt folgendes:

Habe eine Datenbank: site.
In dieser Datenbank gibts es im moment noch 4 tabellen

user_data
(username, nickname passwort usw)
user_message
(Interne Nachrichten die zwischen den Usern versendet werden)
user_personal
(persönliche Daten wie Adresse homepage, icq usw)
user_sitedata
(Forumeinträge, motto, signatur usw)

Sodala
Jetzt ist des allerdings total deppad wenn ich diese Tabellen in eine reintun muss weil des dann ein ordentlich großes Ding wird. Und vermutlich auch langsam wird.

Wie kann ich jetzt diese Tabellen so verknüpfen dass sie alle den gleichen Primärschlüssel haben sprich wenn ich einen Nutzer anlege dann wird der bei user_data, user_message, user_personal und bei user_sitedata angelegt... nur halt da wo keine Daten reinkommen soll halt dann der default werd drinstehen bzw nix!

Wenn ich den User rauslösche dann soll er auch aus den übrigen tabellen mit dem gleichen Primärschlüssel rausgelöscht werden.

Des ganze kann man mit Beziehungen hinbekommen aber wie geht das bei MySQL?

Kann mir da jemand eine kurze Einführung geben?
Der gmeinsame Primärschlüssel lautet userid

Wäre echt super

Danke & Grüße

Matz
 
Hallo Matz,

Deine DB-Struktur ist nicht ganz schlüssig.

Wozu hast Du eine Tabelle user_data und dann noch user_personal?
Die Daten wie, Homepage, Adresse sind doch meist einmalig und können wunderbar in die Tabelle user_data eingetragen werden.

Für die Verknüpfung der einzelnen Tabellen siehe meinen Anhang.
Die Beziehungen kannst Du mit einer ID_User abfragen.
Also ist die ID in user_data 5, so wird in user_message bei ID_User auch eine 5 eingetragen und schon besteht eine Verbindung, welche Du dann per SQL abfragen kannst.
Und so kannst Du auch mit allen weiteren Tabellen verfahren.

Gruß

Torsten
 

Anhänge

  • db_design.gif
    db_design.gif
    5,4 KB · Aufrufe: 86
danke

danke für die antwort
nur mein problem ist dass mysql eine maximale spalltenanzahl hat (zumindest der mysqlcontroll center) und ich nicht alles was ich an userinformationen reinspeichern möcht platz habe!
Kann des sein?

Deswegen hab ich mir gedacht ich verteil des auf Userdaten privat, userdaten die auf die homepage bezogen sind usw

auch wegen der Übersichtlichkeit!

Grüße Matz
 
Hi Matz,

also dass wäre mir absolut neu!
Aber reden wir hier jetzt von Zeilen oder Spalten?

Eine solche Begrenzung wäre mir absolut neu und dass was Du vorhast ist ja noch etwas kleineres, ansonsten dürfte ja kaum ein Projekt funktionieren.
Ich nehme mal an dass Du mit php programmierst.
Da habe ich jetzt schon ein paar Tage nichts mehr mit gemacht, aber "PhpMyAdmin", hat mir bei der Arbeit mit der sql DB nie Probleme bereitet.
Vielleicht versuchst Du das mal.

Du kannst Deine DB-Struktur natürlich machen wie Du möchtest, musst dabei aber beachten dass jede weitere Tabelle auch weiterer Abfragen bedarf.
Möchtest Du also von Deinem User die Homepage auslesen und die ist in einer anderen Tabelle musst Du wieder eine Abfrage starten, was beim Eintrag in nur einer Tabelle nicht nötig wäre.

Bei einer Tabelle ist dass sicherlich nicht so gravierend, aber wenn es mehr werden, kann es schon kompliziert werden, mit Abfragen und Unterabfragen.

Ist wie im Fussball (obwohl ich nicht viel Ahnung davon habe).:)
Hier zwar nicht den Ball flach halten, sondern die DB-Struktur. Nicht zu viele Verschatellungen, sonst kommst Du später in Teufels Küche.

Gruß

Torsten
 
hmm

ok danke

habs jetzt auch mit dem php my admin gemacht mit dem isses gangen aber der MySQL Control Center der hat da rumgmotzt!

Egal

thx for help

Aber ich hab da nochwas
und zwar

meine user gehören nun einer Gruppe an! es gibt allerdings viele verschiedene gruppen dh der spalte usergroup muss ich jetzt einen fremdschlüssel geben zur usergroupid der tabelle usergroups oder nur wie mache ich das bzw was für Auswirkungen hat dies auf den weiteren verlauf beim programmieren?

Grüße Matz
 
Nun, theoretisch ist das nichts anderes als vorher.

Siehe Grafik.

Du erzeugst einfach eine Tabelle für die Gruppen und trägst dann die ID aus "Gruppen" beim "User" ein, so hast Du wieder die Verknüpfung hergestellt.

Wenn Du weitere Informationen dazu möchtest, nutze am besten die Suchfunktion. Wenn Du "Gruppen" als Suchwort, mit der Einschränkung auf Programmierung eingibst, wirst Du einiges finden, was Dir noch weiter helfen wird.

Gruß

Torsten

P.S. Ich weiss übrigens nicht genau, ob ich Deine letzte Frage richtig verstanden habe, vielleicht bin ich auch schon zu müde ;) , aber sind die User immer nur in einer Gruppe oder können sie auch in mehreren vertreten sein?
 

Anhänge

  • db_design.gif
    db_design.gif
    4,4 KB · Aufrufe: 71
Zuletzt bearbeitet:
hmm

muss ich diese Verbindung herstellen?

Also wie schon gesagt ich verwende Mysql, wie kann ich denn bei dieser Datenbank einen Fremdschlüssel erstellen?

Grüße Posseidon

PS: User gehören nur einer Gruppe an sonst wirds kompliziert!
 
Moin,

lass Dich von den Verbindungslinien nicht verwirren. Ich habe dass in Access nur zur Verdeutlichung gemacht.
Du könntest das auch ohne machen.
Wichtig ist nur, dass Du weisst, welche Zeile mit welcher der nächsten Tabelle verbunden ist. Ansonsten werden Deine Abfragen zu Fehlermeldungen führen oder ins Leere laufen.

Gehen wir mal davon aus, Du möchtest alle User die in der Gruppe "Freunde" sind, heraussuchen. "Freunde" hat die ID=2.
In der Tabelle Gruppe sind

ID | Gruppe |
1 | Familie
2 | Freunde

Dann würdest Du in Deine Tabelle User gehen und dort

SELECT * FROM user WHERE ID_Gruppe = " & 2

ausführen und so alle User bekommen, die in der Gruppe "Freunde" sind.
Anders wird es ja kaum funktionieren, da Du ja irgendwie herausbekommen musst, wer nun in welcher Gruppe Mitglied ist.
In der Tabelle User darf natürlich die "ID_Gruppe" nicht mit einem Primärschlüssel belegt sein. Das wäre ja Quatsch.

Soweit verstanden, sonst frage weiter?

Gruß

Torsten
 
jup

des hab ich schon verstanden danke

aber es gibt ja zb in access oder auch anderen Datenbanken sogenannte Fremdschlüssel oder? muss ich diese dann extra anlegen wies im Fall Gruppe ist?

sprich wenn ich meine tabelle user habe und da nun die spalte mit der ID_gruppe dann muss ich für id_gruppe doch den Fremschlüssel aus der Tabelle für die Gruppe holen oder?
Oder brauch ich da nichts mehr festlegen und des muss halt dann beim programmiern klar sein?
 
Vielleicht gibt es diesen Fremdschlüssel, aber da würde ich mich jetzt zu weit hinauslehnen, wenn ich da was zu sagen würde.
Wenn ich was mit php und mysql mache, dann auf die gleiche Art und Weise wie bei Access.
Bei Access kannst Du halt diese Verbindungen grafisch erzeugen und man bekommt so eine gute Übersicht, welche Verknüpfungen man da hat.
Geht aber wie gesagt auch ohne.

Benutze für Deine Tabelle Gruppe einfach den Autowert und für ID_Gruppe in Tabelle User, als Wert "Zahl".
Ansonsten musst Du nichts weiter festlegen und wie Du schon richtig sagtest, diese Tatsache beim programmieren im Hinterkopf haben.

Gruß

Torsten
 
Zurück