Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - Organizzazione del contenuto del database (Sports League)

Ahia. Hai intrapreso un grande lavoro. Sei assolutamente sicuro che nulla di ciò che stai per fare non può essere fatto da qualcosa che è già disponibile? Bene, se sei sicuro, continua a leggere.

In primo luogo, la parte più difficile di ciò che vuoi fare è gestire l'accesso degli utenti. Ti consiglio di iniziare scrivendo il modulo di gestione degli utenti prima di andare oltre.

Per quello che vuoi, sembra probabile che Drupal o uno degli altri sistemi CMS senior sarebbe un ottimo modo per avviare il sistema. Drupal gestirà la gestione degli utenti immediatamente (o con problemi minimi) e potresti scrivere il resto del codice come nodi statici. Ciò semplifica anche l'aggiunta di blog, forum, notizie e la gestione di mailing list ecc.

Come indicato nei commenti sopra, è necessario tenere insieme i dati. sarebbe bene conservare i dati anche per i confronti storici.

Se non si estende un CMS, dopo che sei tornato dallo psichiatra, avrai bisogno di qualcosa del tipo:

  1. file di intestazione per accedere al db e verificare l'autenticazione dell'utente.

  2. footer per visualizzare i tuoi dati

  3. singoli file di pagina per presentare o ottenere i tuoi dati.

La struttura del database per la gestione degli utenti (almeno) dovrebbe essere IRO:

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.

Per gestire le partite avrai bisogno di:

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.

Come puoi vedere, hai bisogno di un bel po' di tavoli, ma NON DEVI provare a fare cose divertenti con i team reali FINO a quando il tuo accesso utente funziona correttamente.

Quello che ho abbozzato per te è un db in forma normale. Nessun dato testuale viene duplicato e i dati sono facili da recuperare, indicizzare e visualizzare. Ritengo che questa domanda sia troppo ampia per SO poiché la progettazione di un database per te è un po' fuori portata, ma penso che il formato generale sia utile.

Ogni tabella dovrebbe contenere solo dati necessari univoci, ad esempio:

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

Ciò consente a più persone di condividere un'e-mail e più e-mail da applicare a una persona senza duplicazione del testo. Gli ID devono essere di tipo INT AUTO_INCREMENT PRIMARY KEY anziché SERIAL in quanto ciò consente di risparmiare molto spazio di archiviazione e non riempirai mai un INT in questa applicazione.

Le altre tabelle devono essere create allo stesso modo. Le colonne whoadded e whenadded sono opzionali e abbastanza affamate di spazio di archiviazione, ma possono essere molto utili. inuse è essenziale impostarlo su BOOL e puoi rimuovere i team senza eliminarli:i dati non vengono persi. Anche un whenremoved e whoremoved è utile per l'audit.

Una parola sulle password:assicurati di memorizzarle come HASH SALTED. Se lo fai, quando il tuo sito viene violato, nessuno avrà la password che usano anche per il loro internet banking. Le persone sono spesso degli idioti. Devi prenderti cura di loro.

Come ho detto, un po 'fuori portata, quindi finirò la risposta qui:ti fornisce, come richiesto, lo schema di base di un 4th Normal Form Db che sarà robusto ed estensibile ma ti lascia fare il lavoro. Perché non fare più domande se il problema si rivela troppo difficile.

Buona fortuna.

AGGIUNTO:

Quadro fai da te:

Se non vuoi imparare a usare uno dei framework o CMS esistenti, dovrai scriverne uno tuo. Stranamente, in realtà è molto facile.

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>

Questi sono usati da mypage.php:

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

Va sottolineato che questo è il minimo indispensabile di cui avrai bisogno ed è davvero schifoso:viene presentato solo per mostrare come questo dovrebbe essere iniziato, non un esempio di codice ideale. Funzionerà comunque.

La chiave sta creando un'intestazione che presenta le variabili di cui avrai bisogno, come una connessione db, nome utente, stato di accesso utente ecc. e un piè di pagina in cui puoi inserire i dettagli per presentare i dati. Il footer è l'unico punto in cui combini HTML e PHP.

Usa la tua $_SESSION per memorizzare le informazioni che devono persistere tra le pagine.

Questi file possono essere semplici o complessi come preferisci:ho creato i miei secoli fa che eseguono diversi controlli sull'utente e sulla sessione e possono visualizzare script, file CSS personalizzati e simili nel piè di pagina. Non è difficile da fare se inizi in modo semplice e costruisci come ti serve. SO sarà qui per aiutarti.

Una parola di cautela:sebbene tu possa iniziare molto semplice, quello che stai cercando di fare ha le gambe e ti sfugge di mano. Controlla il tuo codice dopo averlo installato e funzionante per assicurarti di non aver incluso inavvertitamente falle di sicurezza. È molto facile includerli quando entri in un progetto e hai bisogno di una soluzione rapida e possono essere diabolicamente difficili da individuare in seguito a meno che tu non li stia cercando.