Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Organisieren von Datenbankinhalten (Sportliga)

Autsch. Sie haben eine große Aufgabe übernommen. Sind Sie absolut sicher, dass nichts, was Sie tun werden, nicht durch etwas bereits Verfügbares getan werden kann? Nun, wenn Sie sicher sind, lesen Sie weiter.

Erstens ist der schwierigste Teil dessen, was Sie tun möchten, die Verwaltung Ihres Benutzerzugriffs. Ich würde Ihnen raten, damit anzufangen, Ihr Benutzerverwaltungsmodul zu schreiben, bevor Sie fortfahren.

Für das, was Sie wollen, scheint es wahrscheinlich, dass Drupal oder eines der anderen älteren CMS-Systeme eine großartige Möglichkeit wäre, das System zu booten. Drupal übernimmt Ihre Benutzerverwaltung sofort (oder mit minimalen Problemen) und Sie können den Rest Ihres Codes als statische Knoten schreiben. Dies erleichtert auch das Hinzufügen von Blogs, Foren, Nachrichten und das Verwalten von Mailinglisten usw.

Wie in den obigen Kommentaren erwähnt, müssen Sie Ihre Daten zusammenhalten. Es wäre gut, Daten auch für historische Vergleiche aufzubewahren.

Wenn Sie kein CMS erweitern, benötigen Sie nach Ihrer Rückkehr vom Psychiater etwas in der Art von:

  1. Header-Datei, um auf die Datenbank zuzugreifen und die Benutzerauthentifizierung zu prüfen.

  2. Fußzeilendatei zur Anzeige Ihrer Daten

  3. einzelne Seitendateien zum Präsentieren oder Abrufen Ihrer Daten.

Die Datenbankstruktur für die Handhabung der Benutzer sollte (mindestens) IRO:

sein
Person - details of individual users
username - link person to a username
email - email addresses
club - sports club details
password - passwords
logon - record of logon attempts
role - record of role of individuals in your site
permissions - list of required permissions to access areas of the site
role_permissions - default permissions for each role
person_role - link person to role
person_permissions - link person to permissions (only needed if some individuals need extra permissions not given routinely by their role)
club_person; person_email; - link people to clubs and to their email addresses.

Um die Übereinstimmungen zu handhaben, benötigen Sie:

team - team name, group and club reference
grouping - list of groups eg by age.  
divisions. - list of divisions
venue - list of venues.  Include GPS!!!
match - division, grouping, team1, team2, venue, date, time
result - team1 reported result, team 2 reported result, approved result (you may need to intervene!) match.

Wie Sie sehen können, brauchen Sie ein paar Tische, aber SIE DÜRFEN NICHT versuchen, die lustigen Sachen mit den tatsächlichen Teams zu machen, BIS Ihr Benutzerzugriff richtig funktioniert.

Was ich für Sie skizziert habe, ist eine db in normaler Form. Es werden keine Textdaten dupliziert, und die Daten sind einfach abzurufen, zu indizieren und anzuzeigen. Ich bin der Meinung, dass diese Frage für SO zu weit gefasst ist, da das Entwerfen einer Datenbank für Sie etwas außerhalb des Rahmens liegt, aber ich denke, dass das allgemeine Format nützlich ist.

Jede Tabelle sollte nur eindeutig notwendige Daten enthalten, zB:

Person:  personid int, surname, forename, style, whenadded, whoadded, inuse
email:   emailid, email, whenadded, whoadded, inuse
email_person:  emailpersonid,emailid,personid, whenadded,whoadded,inuse

Dadurch können mehrere Personen eine E-Mail teilen und mehrere E-Mails auf eine Person angewendet werden, ohne dass Text dupliziert wird. IDs sollten vom Typ INT AUTO_INCREMENT PRIMARY KEY und nicht SERIAL sein, da dies eine Menge Speicherplatz spart und Sie in dieser Anwendung niemals ein INT eingeben werden.

Die anderen Tabellen sollten auf die gleiche Weise erstellt werden. Die Spalten whoadded und whenadded sind optional und ziemlich speicherhungrig, können aber sehr nützlich sein. Inuse ist unbedingt erforderlich, setzen Sie dies auf einen BOOL und Sie können Teams entfernen, ohne sie zu löschen - die Daten gehen nicht verloren. Ein whenremoved und whoremoved ist auch für Audits nützlich.

Ein Wort zu Passwörtern – bitte stellen Sie sicher, dass Sie diese als SALTED HASH speichern. Wenn Sie dies tun, wird niemandem das Passwort offengelegt, das er auch für sein Internet-Banking verwendet, wenn Ihre Website gehackt wird. Menschen sind oft Idioten. Du musst dich um sie kümmern.

Wie gesagt, etwas außerhalb des Rahmens, also beende ich die Antwort dort - sie gibt Ihnen wie gewünscht den grundlegenden Überblick über eine 4. Normalform-DB, die robust und erweiterbar ist, Ihnen aber die Arbeit überlässt. Warum nicht mehr Fragen stellen, wenn sich herausstellt, dass das Problem zu schwierig ist?

Viel Glück.

HINZUGEFÜGT:

DIY-Framework:

Wenn Sie nicht lernen möchten, eines der vorhandenen Frameworks oder CMS zu verwenden, müssen Sie Ihr eigenes schreiben. Seltsamerweise ist das eigentlich sehr einfach.

header.php:

<?PHP
$mysqli=new mysqli(credentials....)//connect to database and present a mysqli or pdo object.
session_start(); //open a session
//you will need to authenticate your session here - see below
?>

footer.php:

<HTML>
<HEAD>
<TITLE>
<?PHP echo $pagetitle;?>
</TITLE>
</HEAD>
<BODY>
<?PHP echo $content;?>
</BODY>
</HTML>

Diese werden von mypage.php verwendet:

<?PHP
require("header.php");
//do some stuff that generates $content
$pagetitle="mypage.php";
require("footer.php:);
?>

Es sollte betont werden, dass dies das absolute Minimum ist, das Sie benötigen, und wirklich beschissen ist - es wird nur präsentiert, um zu zeigen, wie dies begonnen werden sollte, und kein Beispiel für idealen Code. Es wird aber funktionieren.

Der Schlüssel besteht darin, eine Kopfzeile zu erstellen, die die Variablen enthält, die Sie benötigen, wie z. B. eine DB-Verbindung, Benutzername, Benutzeranmeldestatus usw., und eine Fußzeile, in die Sie Details eingeben können, um die Daten anzuzeigen. Die Fußzeile ist der einzige Ort, an dem Sie HTML und PHP kombinieren.

Verwenden Sie Ihre $_SESSION, um Informationen zu speichern, die zwischen den Seiten bestehen bleiben müssen.

Diese Dateien können so einfach oder komplex sein, wie Sie möchten - ich habe vor Ewigkeiten meine eigenen erstellt, die mehrere Überprüfungen des Benutzers und der Sitzung durchführen und Skripte, benutzerdefinierte CSS-Dateien und dergleichen in der Fußzeile anzeigen können. Es ist nicht schwer, wenn Sie einfach anfangen und nach Bedarf aufbauen. SO wird hier sein, um Ihnen zu helfen.

Ein Wort der Vorsicht:Obwohl Sie sehr einfach anfangen können, hat das, was Sie zu tun versuchen, Beine und wird außer Kontrolle geraten. Bitte überprüfen Sie Ihren Code, nachdem Sie ihn eingerichtet und ausgeführt haben, um sicherzustellen, dass Sie nicht versehentlich Sicherheitslücken eingebaut haben. Es ist sehr einfach, diese einzufügen, wenn Sie in ein Projekt einsteigen und eine schnelle Lösung benötigen, und sie können später verdammt schwer zu erkennen sein, wenn Sie nicht danach suchen.