php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.08.2006, 10:12  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard Kniffelig: DB Layout check, Instanzierbares Forum [pic]

Hallo zusammen,

ich bin gerade dabei eine etw. kniffelige DB zu designen.
Um das Problem hier anschaulich aufzuzeigen, habe ich mal ein Bsp erzeugt, was eig. sehr verständlich sein sollte.

Wir gehen von einem Forum aus, sollte ja jeder kennen.

Wir haben USER > GROUPS > CATEGORIES > THREADS > POSTS

Das wäre ein normales Forum. Jetzt möchte ich aber ein Forum entwickeln, das aus mehren Instancen bestehen kann. Das heisst, auf phpfriend könnte auch ein Anglerforum laufen - alles in der gleichen Datenbank.
Damit man die Instances auseinanderhalten kann, gibt es einen Table instances - Rubriken, Threads etc. müssen alle den Key instances_id implementieren, um die Sachen zu trennen.

Jetzt mein eigentliches Problem:
Es geht um das Design. Jeder einer Instanz zuweisbare Table enthält als Zugehörigkeit nicht nur die User_id, sondern auch die instance_id. Da mein Projekt recht groß ist (nicht nur forum) - sieht mein Design aus wie ein Spaghettihaufen da jeder table zu user und instances geht.

Hat jemand schon mal noch so einem Prinzip was entworfen?
Würde mich sehr beruhigen, wenn man es so machen kann, vom Aussehen sieht es jedenfalls nicht so aus :/

anbei mal zum verdeutlichen die Vereinfachung vom Forum

gruß marco!

Melchior ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.08.2006, 10:18  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Warum denn nicht? Hast halt einfach eine weiter ID in jeder Tabelle sonst nichts. Was soll daran jetzt noch so viel anders aussehen als ohne instance_id?

Ansich würde es reichen wenn du in den Kategorien die instance_id einfügst. Die Threads sind ja eindeutig identifizierbar wenn NUR die cat_id existiert denn über die cat_id lässt sich die instance_id finden. Genauso bei den Posts da reicht es auch wenn nur die thread_id angegeben ist.

Bei den Usern ist es halt so ne Frage ob du nicht den User für alle Foren haben möchtest? Du könntest z.B. die Usertable ganz ohne instance_id ausstatten und ne weitere Tabelle erstellen in der steht zu welchen Foren der User zugang hat. Z.b.

id|user_id|instance_id

So kann sich der User einmal in deinem System anmelden und wenn er dann ein weiteres Forum benutzen will muss er nicht wieder alle Benutzerdaten angeben sondern kann sich einfach freischalten und die Daten des anderen Forums mitbenutzen.
Flor1an ist offline   Mit Zitat antworten
Alt 30.08.2006, 10:34  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard

hi razor,

sorry, ich habe einen Teil vergessen - im eifer des gefechtes. Bild wurde aktualisiert.

Also im Prinzip hast du Recht, das die instance id nur in die Kategorien sein muss. Dann müsst ich aber jedesmal wenn ich zB ein Thread oder Post aufrufe, die Kategorien left joinen.

Ein weiterer Kniff liegt darin, dass die Nutzer der Foren niemals die richtige Threadid (und andere PKs) sehen. Sie sehen nur eine virtuelle thread_id. Also wenn ich zugriff zum Anzeigen will, geschieht das nicht über die PK sondern über instance_id && virtual_id. Beides zusammen ist ein eindeutiger identifier.

Das hat den Vorteil, das die Leute nicht sehen, dass sie nur eine Instance sind.


Hoffe es ist verständlich wie ich es erkläre. Ist zwar alles recht tricky, aber es funktioniert. Das Problem ist nur das mein DB Layout total durcheinander aussieht, die ganzen Verknüfungen, oh Gott Kann ja mal ein Pic davon uppen, oder besser nicht


gruß marco
__________________
MF goes Melchior
Melchior ist offline   Mit Zitat antworten
Alt 30.08.2006, 11:38  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ich versteh nicht ganz warum du nicht einfach die eigentliche ID von den Threads übergibst. Wenn du instance_id UND virtual_id übergibst dann sieht der User doch wieder dass er auf einer eigenen Instance läuft. Wenn er nur die direkt ID sieht merkt er garnicht dass es noch andere Foren gibt.

Genauso diese ganzen Verknüpfungen sind meiner Meinung nach unnötig. Wenn du einen Thread aufrufst liest du doch so oder so das Forum aus dann brauchst du auch keinen LEFT JOIN o.Ä. die Posts brauchen genauso wenig die instance_id da sie ja immer unter dem Thread angezeigt werden und dieser unter der Forenüberschrift. Dafür musst du so oder so die Instance auslesen und ob dies in einem eigenen Query oder einem LEFT JOIN passiert ist ja ansich egal, wobei ein LEFT JOIN einfacher wäre.
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline   Mit Zitat antworten
Alt 30.08.2006, 12:33  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard

hi razor,

Jeder User hat eine instance_id. Diese wird in ner Session gespeichert und wird nicht per url übergeben. Der User weiss folgend nicht das er nur ne instance ist

Zugriffe auf threads möchte ich nicht per thread_id machen sondern über die virtual id. Wenn das Forum neu angelegt ist, und die thread_id bspweise mit 10034 verknüpft ist, fällt das schon auf..

Wenn jetzt ein Besucher alle Threads von ner Rubrik anzeigt bekommen möchte ich das mit nem select " blablabla WHERE instance_id=SESSION(instance_id) && cat_id=GET(cat_id)" machen.
Wenn ich jetzt hingehen würde und alle relevanten threads mit nem Left join von den Users lösen würde, wäre die DB Belastung zu groß. Würde zwar gehen, in diesem Fall sollte man aber besser den Key instance_id trotz redundanz trotzdem in den Threads lassen.

Ausserdem soll bei dem Projekt ein User bei mehrere instances registriert sein können, und diese im Userinterface wechseln können. Das heisst wir haben noch eine m-n Relation zwischen USERS und USERS_INSTANCES mit dem table USER_has_Instances. ... somit wäre die Zuweisung von Threads zu einer instance durch den user noch aufwendiger

gruß marco
__________________
MF goes Melchior
Melchior ist offline   Mit Zitat antworten
Alt 01.09.2006, 09:28  
Benutzer
 
Registriert seit: 24.01.2005
Beiträge: 56
Melchior
Standard

och,

keiner einen Tipp, wie ich das optimieren könnte?


gruß
marco
Melchior ist offline   Mit Zitat antworten
Alt 09.09.2006, 16:49  
Neuer Benutzer
 
Registriert seit: 09.09.2006
Beiträge: 4
Smithers
Smithers eine Nachricht über ICQ schicken
Standard

Also ich habe so ein Forum bereits gemacht.. ich habe aber z.B. legendlich den Foren Gruppen und den Foren selbst die ID des "Besitzers" gegeben.. Threads und Posts ordnen sich dem ja unter.. und vom post komm ich ja auf den thread und auf das forum.. und somit zum besitzer... das is ja so kein problem...
damit kanni ch dann z.B. auch das richtige DESIGN laden was dem jeweilen forum gehört...
/forum/post.php?id=111 wäre eben TEAM A und ..post.php?id=112 könnte ein ganz anderes Team sein..

vorteil hier: eine user DB und dem forum ist egal wie der user da rein kam... es ist eben ein system
Smithers ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Suche Forum mit folgenden funktionen homezonebenny PHP-Fortgeschrittene 6 03.04.2008 16:45
layout check nilsfeld Off-Topic Diskussionen 13 20.06.2004 18:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
db da pic18, pic.php, php db layout, db pic16f, pic db

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.