sql >> Database >  >> RDS >> Mysql

MySQL - Database-inhoud organiseren (Sportcompetitie)

Au. Je hebt een grote klus aangenomen. Weet je absoluut zeker dat niets wat je gaat doen niet kan worden gedaan door iets dat al beschikbaar is? Nou, als je het zeker weet, lees dan verder.

Ten eerste, het moeilijkste van wat u wilt doen, is het beheren van uw gebruikerstoegang. Ik raad u aan te beginnen met het schrijven van uw gebruikersbeheermodule voordat u verder gaat.

Voor wat je wilt, lijkt het waarschijnlijk dat Drupal of een van de andere senior CMS-systemen een geweldige manier zou zijn om het systeem op te starten. Drupal regelt uw gebruikersbeheer direct uit de doos (of met minimale problemen) en u kunt de rest van uw code als statische knooppunten schrijven. Dit maakt het ook gemakkelijk om blogs, forums, nieuws toe te voegen en mailinglijsten etc. te beheren.

Zoals vermeld in de opmerkingen hierboven, moet u uw gegevens wel bij elkaar houden. het zou goed zijn om ook gegevens te bewaren voor historische vergelijkingen.

Als je een CMS niet verlengt, heb je, nadat je terug bent van de psychiater, iets nodig in de trant van:

  1. header-bestand om toegang te krijgen tot de database en te controleren op gebruikersauthenticatie.

  2. footer-bestand om uw gegevens weer te geven

  3. individuele paginabestanden om uw gegevens te presenteren of te verkrijgen.

Databasestructuur voor het afhandelen van gebruikers (minimaal) moet IRO zijn:

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.

Om de wedstrijden af ​​te handelen heb je nodig:

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.

Zoals je kunt zien, heb je behoorlijk wat tafels nodig, maar JE MOET NIET proberen de leuke dingen met de echte teams te doen TOTDAT je gebruikerstoegang correct werkt.

Wat ik voor je heb geschetst, is een db in normale vorm. Er worden geen tekstuele gegevens gedupliceerd en de gegevens zijn eenvoudig op te halen, te indexeren en weer te geven. Ik heb het gevoel dat deze vraag te breed is voor SO, omdat het ontwerpen van een database voor jou een beetje buiten het bereik valt, maar ik denk dat het algemene formaat nuttig is.

Elke tabel mag alleen unieke noodzakelijke gegevens bevatten, bijvoorbeeld:

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

Hierdoor kunnen meerdere mensen één e-mail delen en kunnen meerdere e-mails worden toegepast op één persoon zonder tekstduplicatie. ID's moeten van het type INT AUTO_INCREMENT PRIMARY KEY zijn in plaats van SERIAL, omdat dit veel opslagruimte bespaart en u nooit een INT in deze toepassing zult invullen.

De andere tabellen moeten op dezelfde manier worden gemaakt. De kolommen whoadded en whenadded zijn optioneel en hebben nogal wat opslagruimte nodig, maar kunnen erg handig zijn. inuse is essentieel, stel dit in op een BOOL en u kunt teams verwijderen zonder ze te verwijderen - de gegevens gaan niet verloren. Een whenverwijderd en whoremoved is ook handig voor audits.

Een woord over wachtwoorden - zorg ervoor dat u deze opslaat als een SALTED HASH. Als je dit doet en je site wordt gehackt, heeft niemand het wachtwoord dat ze ook gebruiken voor internetbankieren. Mensen zijn vaak idioten. Je moet voor ze zorgen.

Zoals ik al zei, een beetje buiten bereik, dus ik zal het antwoord daar beëindigen - het geeft je zoals gevraagd de basisomtrek van een 4e normale vorm Db die robuust en uitbreidbaar zal zijn, maar je het werk laat doen. Waarom niet meer vragen stellen als het probleem te moeilijk blijkt te zijn.

Veel succes.

TOEGEVOEGD:

DIY-framework:

Als u een van de bestaande frameworks of CMS niet wilt leren gebruiken, moet u uw eigen frameworks schrijven. Vreemd genoeg is dit eigenlijk heel eenvoudig.

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>

Deze worden gebruikt door mypage.php:

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

Het moet worden benadrukt dat dit het absolute minimum is dat je nodig hebt en echt waardeloos is - het wordt alleen gepresenteerd om te laten zien hoe hiermee moet worden begonnen, niet als een voorbeeld van ideale code. Het zal wel werken.

De sleutel is het maken van een koptekst die de variabelen weergeeft die u nodig hebt, zoals een db-verbinding, gebruikersnaam, gebruikersaanmeldingsstatus enz. en een voettekst waarin u details kunt invoeren om de gegevens te presenteren. De voettekst is de enige plaats waar u HTML en PHP combineert.

Gebruik uw $_SESSION om informatie op te slaan die tussen pagina's moet worden bewaard.

Deze bestanden kunnen zo eenvoudig of complex zijn als je wilt - ik heb mijn eigen eeuwen geleden gemaakt die verschillende controles op de gebruiker en sessie uitvoeren en scripts, aangepaste CSS-bestanden en dergelijke in de voettekst kunnen weergeven. Het is niet moeilijk om te doen als je eenvoudig begint en voortbouwt als je nodig hebt. SO zal er zijn om je te helpen.

Een woord van waarschuwing:hoewel je heel eenvoudig kunt beginnen, heeft wat je probeert te doen benen en loopt het uit de hand. Controleer uw code nadat u deze in gebruik heeft genomen om er zeker van te zijn dat u niet per ongeluk beveiligingsfouten heeft toegevoegd. Het is heel gemakkelijk om deze op te nemen als je in een project komt en een snelle oplossing nodig hebt en ze kunnen later verdomd moeilijk te herkennen zijn, tenzij je ernaar op zoek bent.



  1. Lucene.Net configureren met SQL Server

  2. Hoe unieke beperking werkt met NULL-waarde in MySQL

  3. Een label gebruiken in een hebbende clausule in sqlachemy

  4. Hoe maak je de queries in een opgeslagen procedure bewust van de Spring Transaction?