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

时间:2013-08-22 09:27:38

标签: php mysql database-design mysqli

我为我的青少年运动组织设计了一个PHP / MySQL解决方案,它将显示参加任何赛季的球队的赛程和排名。不幸的是,我只是在数据库设计方面学习绳索,并且在我的大脑周围应该是一个相对简单的概念时遇到一些挑战。也许有人可以介入并澄清几点?

我不清楚的是如何正确构建数据库和表以正确开始。这是我最终需要设置的内容:

  1. 我们有大约50所会员学校。每个人都需要自己的登录ID和密码。我考虑将这些存储在他们自己的独立数据库中,因为每个季节都会重新使用这些帐户来代表团队,并允许教练登录并更新他们的游戏结果。

  2. 每个赛季都有两种不同的运动。例如,即将到来的秋季有一个女子排球联赛和一个男子足球联赛。然后每个联盟都有多个部门(按地理区域划分),学校在这些部门中按常规赛时间表进行。我不确定每个赛季是否需要自己独立的数据库,每个联赛等等。

  3. 每个部门的常规赛将从计划程序(通过Excel电子表格)导入并显示在自己的网页上,学校可以在其中查看他们即将推出的游戏并登录以更新结果。 / p>

  4. 随着游戏结果的更新,我需要找到一种方法,将这些结果反映在显示该部门联赛排名的单独网页上。

    < / LI>

    为了更清楚地展示我尝试做的事情,请分别查看我为计划和排名数据创建的这两个模拟页面:

    http://www.712jefferson.org/pal/schedules.html

    http://www.712jefferson.org/pal/standings.html

    这是我寻找指导的地方。我应该如何为所有这些数据构建MySQL框架?

    我正在考虑为学校登录ID设置一个单独的数据库,然后为每个季节性运动(例如Boys Volleyball 2013)创建一个单独的数据库,每个分区都有单独的表格和x列数代表其中的时间表和排名。

    这听起来是对的吗?我觉得这一切都错了吗?任何有助于充实这一思想过程的帮助或指导都将受到青睐!

    非常感谢你!

3 个答案:

答案 0 :(得分:2)

哎哟。你已经做了很大的工作。你是否绝对确定你不会做任何已经可用的事情?好吧,如果你确定,请继续阅读。

首先,您要做的最难的部分是管理您的用户访问权限。我建议您在开始之前先编写用户管理模块。

对于你想要的东西,似乎Drupal或其他高级CMS系统之一可能是引导系统的好方法。 Drupal将立即处理您的用户管理(或具有最小的问题),您可以将其余代码编写为静态节点。这也可以轻松添加博客,论坛,新闻和管理邮件列表等。

如上面的评论所述,您需要将数据保存在一起。保留历史比较数据也是一件好事。

如果没有扩展CMS,在您从精神科医生那里回来之后,您将需要以下内容:

  1. 头文件,用于访问数据库并检查用户身份验证。

  2. 页脚文件以显示您的数据

  3. 用于显示或获取数据的单个页面文件。

  4. 处理用户的数据库结构(至少)应为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并且对这项服务非常满意,我认为它可以完成您所需要的一切。