Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - Organizando o conteúdo do banco de dados (Sports League)


Ai. Você assumiu um grande trabalho. Você tem certeza absoluta de que nada do que vai fazer não pode ser feito por algo que já está disponível? Bem, se você tem certeza, continue a ler.

Em primeiro lugar, a parte mais difícil do que você deseja fazer é gerenciar o acesso do usuário. Aconselho que você comece escrevendo seu módulo de gerenciamento de usuários antes de prosseguir.

Para o que você deseja, parece provável que o Drupal ou um dos outros sistemas CMS seniores seja uma ótima maneira de inicializar o sistema. O Drupal lidará com o gerenciamento de usuários imediatamente (ou com problemas mínimos) e você poderá escrever o restante do seu código como nós estáticos. Isso também facilita a adição de blogs, fóruns, notícias e o gerenciamento de listas de discussão, etc.

Conforme declarado nos comentários acima, você precisa manter seus dados juntos. seria bom manter os dados para comparações históricas também.

Se não estiver estendendo um CMS, depois de voltar do psiquiatra, você precisará de algo como:

  1. header para acessar o banco de dados e verificar a autenticação do usuário.

  2. arquivo de rodapé para exibir seus dados

  3. arquivos de páginas individuais para apresentar ou obter seus dados.

A estrutura do banco de dados para lidar com os usuários (no mínimo) deve ser 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.

Para lidar com as correspondências, você precisará de:
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.

Como você pode ver, você precisa de algumas mesas, mas NÃO DEVE tentar fazer as coisas divertidas com as equipes reais ATÉ que seu acesso de usuário esteja funcionando corretamente.

O que eu esbocei para você é um db na forma normal. Nenhum dado textual é duplicado e os dados são fáceis de recuperar, indexar e exibir. Eu sinto que essa pergunta é muito ampla para SO, pois projetar um banco de dados para você está um pouco fora do escopo, mas acho que o formato geral é útil.

Cada tabela deve conter apenas dados necessários exclusivos, por exemplo:
Person:  personid int, surname, forename, style, whenadded, whoadded, inuse
email:   emailid, email, whenadded, whoadded, inuse
email_person:  emailpersonid,emailid,personid, whenadded,whoadded,inuse

Isso permite que várias pessoas compartilhem um e-mail e vários e-mails sejam aplicados a uma pessoa sem duplicação de texto. Os IDs devem ser do tipo INT AUTO_INCREMENT PRIMARY KEY em vez de SERIAL, pois isso economiza muito espaço de armazenamento e você nunca preencherá um INT neste aplicativo.

As outras tabelas devem ser criadas da mesma forma. As colunas whoadded e whenadded são opcionais e exigem bastante armazenamento, mas podem ser muito úteis. inuse é essencial definir isso como um BOOL e você pode remover equipes sem excluí-las - os dados não são perdidos. Um whenremoved e whoremoved também é útil para auditoria.

Uma palavra sobre senhas - certifique-se de armazená-las como um SALTED HASH. Se você fizer isso, quando seu site for invadido, ninguém terá a senha que eles também usam para o internet banking exposta. As pessoas são muitas vezes idiotas. Você tem que cuidar deles.

Como eu disse, um pouco fora do escopo, então vou encerrar a resposta por aí - ele fornece, conforme solicitado, o esboço básico de um 4º Db de forma normal que será robusto e extensível, mas deixa você fazer o trabalho. Por que não fazer mais perguntas se o problema for muito difícil.

Boa sorte.

ADICIONADO:

Estrutura DIY:

Se você não quiser aprender a usar um dos frameworks ou CMS existentes, precisará escrever o seu próprio. Curiosamente, isso é realmente muito fácil.

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>

Estes são usados ​​por mypage.php:
<?PHP
require("header.php");
//do some stuff that generates $content
$pagetitle="mypage.php";
require("footer.php:);
?>

Deve-se enfatizar que este é o mínimo que você precisará e é realmente chato - ele é apresentado apenas para mostrar como isso deve ser iniciado, não um exemplo de código ideal. Mas funcionará.

A chave é criar um cabeçalho que apresente as variáveis ​​que você precisará, como uma conexão db, nome de usuário, status de logon do usuário etc. e um rodapé no qual você pode inserir detalhes para apresentar os dados. O rodapé é o único lugar onde você combina HTML e PHP.

Use seu $_SESSION para armazenar informações que precisam persistir entre as páginas.

Esses arquivos podem ser tão simples ou complexos quanto você quiser - criei meus próprios tempos atrás que fazem várias verificações no usuário e na sessão e podem exibir scripts, arquivos CSS personalizados e afins no rodapé. Não é difícil de fazer se você começar simples e construir conforme necessário. SO estará aqui para ajudá-lo.

Uma palavra de cautela:embora você possa começar muito simples, o que você está tentando fazer tem pernas e sairá do controle. Por favor, audite seu código depois de colocá-lo em funcionamento para ter certeza de que você não incluiu falhas de segurança inadvertidamente. É muito fácil incluí-los à medida que você entra em um projeto e precisa de uma solução rápida e eles podem ser extremamente difíceis de detectar mais tarde, a menos que você esteja procurando por eles.