我为我的青少年运动组织设计了一个PHP / MySQL解决方案,它将显示参加任何赛季的球队的赛程和排名。不幸的是,我只是在数据库设计方面学习绳索,并且在我的大脑周围应该是一个相对简单的概念时遇到一些挑战。也许有人可以介入并澄清几点?
我不清楚的是如何正确构建数据库和表以正确开始。这是我最终需要设置的内容:
我们有大约50所会员学校。每个人都需要自己的登录ID和密码。我考虑将这些存储在他们自己的独立数据库中,因为每个季节都会重新使用这些帐户来代表团队,并允许教练登录并更新他们的游戏结果。
每个赛季都有两种不同的运动。例如,即将到来的秋季有一个女子排球联赛和一个男子足球联赛。然后每个联盟都有多个部门(按地理区域划分),学校在这些部门中按常规赛时间表进行。我不确定每个赛季是否需要自己独立的数据库,每个联赛等等。
每个部门的常规赛将从计划程序(通过Excel电子表格)导入并显示在自己的网页上,学校可以在其中查看他们即将推出的游戏并登录以更新结果。 / p>
随着游戏结果的更新,我需要找到一种方法,将这些结果反映在显示该部门联赛排名的单独网页上。
< / LI> 醇>为了更清楚地展示我尝试做的事情,请分别查看我为计划和排名数据创建的这两个模拟页面:
http://www.712jefferson.org/pal/schedules.html
http://www.712jefferson.org/pal/standings.html
这是我寻找指导的地方。我应该如何为所有这些数据构建MySQL框架?
我正在考虑为学校登录ID设置一个单独的数据库,然后为每个季节性运动(例如Boys Volleyball 2013)创建一个单独的数据库,每个分区都有单独的表格和x列数代表其中的时间表和排名。
这听起来是对的吗?我觉得这一切都错了吗?任何有助于充实这一思想过程的帮助或指导都将受到青睐!
非常感谢你!
答案 0 :(得分:2)
哎哟。你已经做了很大的工作。你是否绝对确定你不会做任何已经可用的事情?好吧,如果你确定,请继续阅读。
首先,您要做的最难的部分是管理您的用户访问权限。我建议您在开始之前先编写用户管理模块。
对于你想要的东西,似乎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。
应该以相同的方式创建其他表。添加和添加后的列是可选的,并且非常需要存储,但可能非常有用。 inuse是必不可少的,将此设置为BOOL,您可以删除团队而不删除它们 - 数据不会丢失。 A whenremoved和whoremoved对审计也很有用。
关于密码的说法 - 请确保将这些密码存储为SALTED HASH。如果您这样做,当您的网站被黑客入侵时,没有人会拥有他们也用于他们的网上银行的密码。人们常常是白痴。你必须照顾他们。
正如我所说,有点超出范围,所以我将在那里结束答案 - 它根据要求为您提供了第4范式Db的基本轮廓,它将是强大且可扩展的,但让您完成工作。如果问题变得太难,为什么不提出更多问题。
祝你好运。增加:
DIY框架:
如果您不想学习使用其中一个现有框架或CMS,则需要编写自己的框架或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
?>
footer.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的唯一地方。
使用$ _SESSION存储需要在页面之间保留的信息。
这些文件可以像你喜欢的一样简单或复杂 - 我创建了自己的年龄,对用户和会话进行了几次检查,并且可以在页脚中显示脚本,自定义CSS文件等。如果你开始简单并根据需要进行构建,这并不难。 SO会来帮助你。
提醒一句:尽管你可以开始非常简单,但你想要做的事情有腿,并且会失控。请在启动并运行后审核您的代码,以确保您没有无意中包含安全漏洞。当你进入一个项目并且需要快速修复时,很容易包含这些内容,除非你正在寻找它们,否则以后很难发现它们。
答案 1 :(得分:1)
我在你的位置,我找到的最佳解决方案是使用后端即服务(Baas)提供商,如Parse.com或Stackmob.com或许多其他人。他们为您完成数据库托管以及您的用户管理(登录/注册/忘记密码等),因此您不必担心它。您可以通过REST API访问它们,并且它们在Github上也有PHP库。
由于您不熟悉数据库管理,这是一项非常重要的任务,因此该解决方案可能会让您头疼不已。
当然,你仍然需要决定如何组织你的表(或者Parse中的'类',Stackmob中的'schema'等),但是他们也提供了关系API的帮助。它们具有专门为存储用户而设计的预定义User表。
当然,他们的API不如SQL灵活,但它也不会受到SQL注入的影响,这是该灵活性的缺点。另一方面,他们还提供自定义代码以增强灵活性。
编辑。 忘了提一下,那些BaaS平台也允许将数组存储为数据库字段,这非常方便。
答案 2 :(得分:1)
这可能是一个很大的构建。您可能想尝试现有的联盟管理服务。那里有几个。我认识一些朋友使用Teamopolis并且对这项服务非常满意,我认为它可以完成您所需要的一切。