Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Datenbank System für ein Board

Hallo
Ich bin gerade dabei mir eine Tabellenstruktur für eine Mysql-Datenbank zu überlegen.
Dabei habe ich irgendwie noch so ein paar Probleme, bzw. keine Probleme, sondern „keinen Plan“ was die besten Lösung ist.

Also:
Folgende Tabellen:
-„board“
       Felder(id,head,beschreibung, rechte???)
       Hier kommen die Oberthemen aus dem Forum hinein
-„themen“
     Felder(id,board_id,head,beschreibung,....)
      Hier kommen dann die vom Benutzer erstellten Themen rein, das Feld „board_id“ gibt die
      Oberkategorie an.
-„antworten“
        Felder(id,themen_id, user_id,datum.....)
        Hier stehen dann die Beiträge drin, themen_id stellt wieder die Verbingung zum Thema     
        Her, user_id gibt den benutzer an:
-„user“
         Felder(id,rechte_id,name,passwort)
-„rechte“
      ERSTES PROBLEM ;)


       Also ich möchte, das bestimmt boards nur für bestimmte gruppen sichtbar sind.
        Also jeder User hat eine Gruppe:
Dann müsste bei der Tabelle“user“ ein Feld herein mit der „id“ der gruppe
So jetzt könnte ich ja einfach für jede Gruppe die Boards öffnen.

1.Problem/Frage
Ist es sinnvoll neben der tabelle „gruppe“ noch eine tabelle „rechte anzulegen“, wo dann halt die jeweiligen rechte  reinkommen und die gruppen_id
also so

-„rechte“
    Felder: (gruppenid,recht)
Dann hätte ich für jedes Recht(z.b verschieben) einen neuen Datensatz, falls man das erweitern möchte, z.b durch kleine Adminfunktionen.
Irgendwie weiß ich nicht so ganz wie ich das machen soll, man könnte ja auch bei der tabelle gruppe, für jedes recht eine neue Spalte anlegen, zb. Spalte „verschieben“ und dann halt JA oder NEIN, (TRUE OR FALSE) , dann hätte man das auch.
Ich hoffe ihr versteht das.
Ich möchte nur nicht anfangen zu basteln, und dann nachher wieder neu anfangen, weil ich mir total den Mist ausgedacht habe ;).


2. Problem
Wie muss ich die boards für mehrere Gruppen  sichtbar machen?
Da muss ja dann in die Tabelle „boards“ ein Feld mit gruppe_id.
Hier könnte ich dann einen String reinsetzen, mit allen Gruppen_ids, die dieses board betrachten dürfen.
Allerdings, glaube ich man sollte keine strings in tabellen schreiben oder ????
Ich muss diese ja danach mühsam bearbeiten und kann diese nicht gleich mit mysql abfragen.
Andere Idee:
Zwischen tabelle
Ich mache eine tabelle „borads-gruppe“ dort kommt dann die id des borads rein und die der gruppe, die es betreten darf.
Also als Beispiel : Board 1 darf von gruppe 1 und 2 besucht werden
Dann säh das in der tabelle so aus
Board   gruppe
  1     1
  1     2

Ist das eine guten Lösung ?

Ich hoffe ihr versteht alles und wisst auch das ich im Prinzip nur hören will ob das guten Herangehensweisen sind oder nicht!

Danke schon mal
Der_webi
 


Antworten zu Datenbank System für ein Board:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi webi |

Man merkt, dass du dir wirklich Gedanken gemacht hast! In Zeiten, wo Leute häufig fertige Lösungen gepostet haben wollen, ist das doch mal sehr angenehm :)

Also: Es gibt für solche Probleme klare Regeln beim Datenbank-Design. Denen bist du sehr nahe gekommen. Übrigens hier nachzulesen, ist nur nicht ganz so einfach geschrieben.

Zur ersten Frage:
Nehmen wir an, du lagerst die Rechte in eine eigene Tabelle aus. Dann würdest du doch mit jeder Gruppe genau einen Datensatz der Rechte-Tabelle verknüpfen. Es besteht also eine 1:1-Beziehung, und genau diese wird in den meisten Fällen nicht auf mehrere Tabellen verteilt (es sei denn es gibt triftige Gründe dafür, z.B. weil die Tabelle sehr umfangreich ist). Ansonsten ist dein Vorhaben in Ordnung. Du setzt einfach Flags für jedes spezifische Recht, und damit passt das. Alternativ könntest du auch die Rechte binär abbilden und dann als Dezimalzahl speichern, damit bräuchtest du dann nur ein einziges Feld für die Rechte. Muss aber nicht sein.

Zum zweiten Problem:
Die Idee mit den IDs innerhalb eines Feldes ist natürlich blöd, und das hast du ja auch selber erkannt. Genau genommen würde dies eine Verletzung der so genannten 1. Normalform bedeuten. Dein 2. Vorschlag mit der Zwischentabelle ist genau die Lösung, die du brauchst. Denn es liegt hier eine viele-zu-viele-Beziehung (m:n) vor, und sowas lässt sich in einer relationalen Datenbank nur durch Zwischentabellen abbilden. So als Tipp: für diese Tabelle brauchst du kein ID-Feld mehr, da die Kombination aus Board und Gruppe eindeutig ist, diese 2 Felder bilden zusammen also den Primärschlüssel.

Na denn frohes Werkeln! ;)

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi
Danke erstmal

Man merkt, dass du dir wirklich Gedanken gemacht hast! In Zeiten, wo Leute häufig fertige Lösungen gepostet haben wollen, ist das doch mal sehr angenehm :)
Ja aber soll ich fragen :
Machst du mir ein Forum mit folegenden Funkionen ? ;D;D;D
Ich möchte das gerne selbst machen... dazu dann halt folgendes:
zum 1. Problem:
Also da hast du glaube ich noch was falsch verstanden(bzw. ich falsch ausgedrückt)
Ich würde doch mehrere Datensätze für eine Gruppe haben
zum bsiepiel

tabelle "rechte"
feld(id,recht,gruppenid)

datensätze
 (1,verschieben,1)
 (2,löschen,1)
Das wäre dann doch 2 Datensätze für eine Gruppe, daher dachte ich das das so sinnvoler wäre, da es duch aussein kann, das es mal erweitert wird!

Dan müsste ich einfach einen Datensatz einfügen,

Also ist das doch dann keine 1:1 Beziehung, oder ?

wenn ich das in der Tabelle "Gruppe" mache müsste ich immer eine neu Spalte(Feld) anlegen in der Tabelle

Flags sind ja dann sowas wie TRUE und FALSE.
Das ginge ja dann auch, nur müsste ich dann halt immer wieder eine neue Spalte anlegen.

Also wie soll ich das jetzt hier machen, ich denke immer noch, dass die extra Tabelle ein gute Lösung ist, weiß aber nicht(kann miir nicht vorstellen) wie ich das dann bei der Programmierung berücksichtigen muss.


zum 2ten Problem:
Alles paletti ;D;D;D;D

Zitat
Also: Es gibt für solche Probleme klare Regeln beim Datenbank-Design. Denen bist du sehr nahe gekommen. Übrigens hier nachzulesen, ist nur nicht ganz so einfach geschrieben.
Danke schön, das hast du mir übring früher schonmal geschickt, da hab ich es nur überflogen.
Aber ich glaube es ist besser,wenn ich jetzt mal lese, weil ichnun auch die Begriffe kenne, die ich damals nicht verstanden habe.

gruß
Der_webi


 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Ja aber soll ich fragen :
Machst du mir ein Forum mit folegenden Funkionen ? ;D;D;D

Hat's in ähnlicher Form alles schon gegeben. Oder so nach dem Motto: "Sagt mir mal, wie ich das mache." Allerdings ohne jeglichen Ansatzpunkt ;)


tabelle "rechte"
feld(id,recht,gruppenid)

datensätze
 (1,verschieben,1)
 (2,löschen,1)
Das wäre dann doch 2 Datensätze für eine Gruppe, daher dachte ich das das so sinnvoler wäre, da es duch aussein kann, das es mal erweitert wird!
...
Also ist das doch dann keine 1:1 Beziehung, oder ?

Richtig, das wäre dann keine 1:1-Beziehung. Würde ich aber so nicht machen. Rechte müssen für alle Gruppen gleichermaßen gesetzt sein, und zwar 0 oder 1, true oder false, hopp oder topp ;). Das liegt daran, dass ein bestimmtes Recht ein festes Attribut einer Gruppe ist und somit als Feld in die Tabelle einfließen sollte.



wenn ich das in der Tabelle "Gruppe" mache müsste ich immer eine neu Spalte(Feld) anlegen in der Tabelle

Richtig. Deswegen am besten vorher genau überlegen, welche Rechte du vergeben willst. Und eine neue Version einer Software darf auch durchaus mal eine Änderung im Datenmodell mit sich bringen ;)


Flags sind ja dann sowas wie TRUE und FALSE.
Das ginge ja dann auch, nur müsste ich dann halt immer wieder eine neue Spalte anlegen.

Korrekt!

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Richtig. Deswegen am besten vorher genau überlegen, welche Rechte du vergeben willst. Und eine neue Version einer Software darf auch durchaus mal eine Änderung im Datenmodell mit sich bringen ;)

Gut wird zwar nicht als Software verkauft, oder gar angeboten, sondern erstmal in eine Website integriert, dort sollen halt verschiede Usergruppen Sachen besprechen können.

Besten Dank auf jeden Fall.

der_webi

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Gut wird zwar nicht als Software verkauft, oder gar angeboten, sondern erstmal in eine Website integriert, dort sollen halt verschiede Usergruppen Sachen besprechen können.

Macht nichts. Auch private Projekte dürfen (und sollten sogar) versioniert werden :)

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo
Wollte nach mal "Dankeschön" sagen.
Das klappt alles wunderbar bis jetzt.
Ich hatte noch keine Problem und das Grundegerüst steht bereits, muss nur noch Kleinigekiten(ein paar mehr) machen.

Da sieht man mal wieder wie wichtig es ist sich vorher gedanken zu machen, dann läuft das anchher wie von selbst.


gruß
der_webi

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Gerne doch, und viel Erfolg weiterhin! :)


« Was haltet Ihr von diesem Webhostingangebot?divs mit Prozentangaben »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Benutzerkonto
Windows bietet die Möglichkeit Benutzerkonten, kurz Nutzerkonten, anzulegen. Auf diese Weise kann ein Rechner von mehreren Nutzern verwendet werden.   Bei jed...

Benutzerkontensteuerung
In modernen Windows Betriebssystemen besteht die Möglichkeit, verschiedene Benutzerkonten anzulegen - wie auch unter Linux und macOS. Diese Funktion ermöglicht ...

Arbeitsspeicher
Arbeitsspeicher, auch Hauptspeicher oder RAM genannt, ist ein wichtiger, sehr schneller Speicherbereich des PCs, der seine Daten aber beim Auschalten oder Neustarten verl...