php - MySQL-组织数据库内容(体育联盟)

标签 php mysql database-design mysqli

我正在为我的青年体育组织设计一个PHP/MySQL解决方案,它将显示参加任何给定赛季的球队的时间表和排名。不幸的是,我只是在学习数据库设计的诀窍,并有一点挑战,围绕着一个相对简单的概念包装我的大脑。或许有人可以介入并澄清几点?
我不清楚的是如何准确地构造数据库和表以正确地开始。这是我最终需要建立的:
我们有大约50所成员学校。每个人都需要自己的登录ID和密码。我正在考虑将这些数据存储在他们自己的独立数据库中,因为这些帐户将在每个赛季再次被用来代表球队,并允许教练登录和更新他们的比赛结果。
每个赛季有两项不同的运动。例如,即将到来的秋季赛季有一个女排联赛和一个男旗足球联赛。然后每个联赛都有多个分区(按地理区域划分),学校在这些分区中执行他们的常规赛时间表。我不确定每个赛季是否需要单独的数据库,每个联赛等等。
每个部门的常规赛将从日程安排程序(通过Excel电子表格)中导入,并显示在学校自己的网页上,学校可以在网页上查看即将举行的比赛并登录更新结果。
随着比赛结果的更新,我需要找到一种方法,让这些结果反映在一个单独的网页,在那里,该部门的联赛排名显示。
为了更清楚地演示我要做的事情,请看一下我分别为日程和排名数据创建的两个模拟页面:
http://www.712jefferson.org/pal/schedules.html
http://www.712jefferson.org/pal/standings.html
我在这里找你的指导。我应该如何为所有这些数据构建MySQL框架?
我在考虑一个单独的数据库,用于学校登录ID,然后是一个单独的数据库,用于每个季节性运动(如2013年男排),每个分区有单独的表格,x列数代表其中的时间表和排名。
听起来对吗?我是不是想错了?任何有助于充实这一思想过程的帮助或指导都将不胜感激!
非常感谢!

最佳答案

哎哟。你承担了一个大任务。你确定你将要做的一切都不能由现有的事情来完成吗?好吧,如果你确定,继续读下去。
首先,你想要做的最困难的部分是管理你的用户访问。我建议您先编写用户管理模块,然后再进一步。
对于您想要的,Drupal或其他高级CMS系统可能是引导系统的一个好方法。Drupal将直接处理您的用户管理(或者用最少的问题),您可以将其余代码作为静态节点编写。这也使得添加博客、论坛、新闻和管理邮件列表等变得容易。
如上所述,您确实需要将数据保存在一起。保留数据进行历史比较也不错。
如果不延长CMS,在你从精神病医生那里回来后,你需要一些大致如下的东西:
用于访问数据库并检查用户身份验证的头文件。
显示数据的页脚文件
显示或获取数据的单独页面文件。
处理用户的数据库结构(至少)应为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.

要处理匹配项,您需要:
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.

如您所见,您需要一些表,但在您的用户访问权限正常工作之前,您不能尝试与实际团队一起做有趣的事情。
我给你画的是一个普通形式的数据库。文本数据不重复,而且数据易于检索、索引和显示。我确实觉得这个问题太宽泛了,所以为您设计一个数据库有点超出范围,但我认为通用格式是有用的。
每个表只应包含唯一的必需数据,例如:
Person:  personid int, surname, forename, style, whenadded, whoadded, inuse
email:   emailid, email, whenadded, whoadded, inuse
email_person:  emailpersonid,emailid,personid, whenadded,whoadded,inuse

这允许多人共享一封电子邮件,并允许多封电子邮件应用于一个人,而无需重复文本。id应该是INT AUTO_INCREMENT PRIMARY KEY类型,而不是SERIAL类型,因为这样可以节省大量存储空间,而且在这个应用程序中永远不会填充INT。
其他表应以相同的方式创建。whoadded和whenadded列是可选的,非常需要存储,但是非常有用。inuse是必需的,将其设置为BOOL,您可以在不删除团队的情况下删除它们-数据不会丢失。一个whenremoved和whoremoved对于审计也很有用。
一个关于密码的词-请确保将这些存储为咸杂凑。如果你这样做,当你的网站被黑客攻击,没有人会有密码,他们也使用他们的网上银行暴露。人们常常是白痴。你得照顾他们。
正如我所说,有点超出范围,所以我将在这里结束答案-它给你要求的第四个标准形式的数据库,将是稳健和可扩展的基本轮廓,但让你做的工作。如果问题太难,为什么不多问些问题呢。
祝你好运。
补充:
DIY框架:
如果您不想学习使用现有框架或CMS中的一个,则需要编写自己的框架。奇怪的是,这其实很容易。
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
?>

页脚.php:
<HTML>
<HEAD>
<TITLE>
<?PHP echo $pagetitle;?>
</TITLE>
</HEAD>
<BODY>
<?PHP echo $content;?>
</BODY>
</HTML>

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

应该强调的是,这是你所需要的最低限度的要求,而且是非常糟糕的——它只是展示了应该如何开始,而不是一个理想代码的范例。不过,它会起作用的。
关键是创建一个显示所需变量(如数据库连接、用户名、用户登录状态等)的页眉和一个可以输入详细信息以显示数据的页脚。页脚是将HTML和PHP结合在一起的唯一地方。
使用$u会话存储需要在页面之间保持的信息。
这些文件可以是简单的,也可以是复杂的,你喜欢-我创建了自己的年龄之前,做了几个检查的用户和会话,可以显示脚本,自定义CSS文件等在页脚。如果你从简单开始,并在需要的基础上不断发展,这并不难做到。所以我会来帮你的。
有一句话要提醒你:虽然你可以很简单地开始,但你正在尝试做的是有腿的,会失控的。请在启动并运行代码后对其进行审核,以确保没有无意中包含安全缺陷。当你进入一个项目并且需要一个快速的解决方案时,很容易将它们包括进来,而且除非你正在寻找它们,否则它们很难被发现。

关于php - MySQL-组织数据库内容(体育联盟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18376535/

相关文章:

sql-server - 是否有理由对 SQL Server 中的列使用 Base2 长度?

php - 当 Laravel 中返​​回更多结果时,循环关联数组返回单个结果

javascript - 不断刷新/接收输出 <div>

php - 如何将后端数据从 PHP(My SQL) 导入到 vuejs 应用程序中

mysql - 如何将一张表与两张表关联起来

sql-server - 在 sql server 中存储持续时间(时间跨度)

php - 具有基于字符串的主键的多对多 Laravel 4

mysql - 案例陈述的问题(按类(class)数量组织部门)

mysql - 第一个表中的所有行都与第二个表连接

MySQL 简单插入查询在 "query end"步骤上变慢