2

我正在为我的青年体育组织设计一个 PHP/MySQL 解决方案,它将显示参加任何给定赛季的球队的时间表和排名。不幸的是,当涉及到数据库设计时,我只是在学习绳索,并且在将我的大脑包裹在应该是一个相对简单的概念上时遇到了一些挑战。也许有人可以介入并澄清几点?

我不清楚的是如何准确地构建数据库和表以正确启动。这是我最终需要设置的:

  1. 我们有大约 50 所会员学校。每个人都需要自己的登录 ID 和密码。我正在考虑将这些存储在他们自己单独的数据库中,因为这些帐户将在每个赛季再次用于代表球队并允许教练登录并更新他们的比赛结果。

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

  3. 每个部门的常规赛将从日程安排程序(通过 Excel 电子表格)导入并显示在自己的网页上,学校可以在其中查看即将举行的比赛并登录以更新结果。

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

为了更清楚地演示我正在尝试做什么,请查看我分别为时间表和排名数据创建的这两个模拟页面:

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

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

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

我正在考虑为学校登录 ID 建立一个单独的数据库,然后为每个季节性运动(例如 2013 年男子排球)建立一个单独的数据库,其中每个部门都有单独的表格和 x 列来表示其中的时间表和排名。

那个听起来是对的吗?我想这一切都错了吗?非常感谢任何有助于充实这一思维过程的帮助或指导!

太感谢了!

4

3 回答 3

2

哎哟。你承担了一项重大工作。您是否绝对确定您将要做的任何事情都不能通过已经可用的东西来完成?好吧,如果您确定,请继续阅读。

首先,您想要做的最困难的部分是管理您的用户访问。我建议您先编写用户管理模块,然后再继续。

对于您想要的,Drupal 或其他高级 CMS 系统似乎是引导系统的好方法。Drupal 将立即处理您的用户管理(或问题最少),您可以将其余代码编写为静态节点。这也使得添加博客、论坛、新闻和管理邮件列表等变得容易。

如上面评论中所述,您确实需要将数据保存在一起。最好保留数据以进行历史比较。

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

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

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

  3. 单独的页面文件来呈现或获取您的数据。

处理用户的数据库结构(至少)应该是 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.

如您所见,您需要相当多的表格,但您不得尝试与实际团队一起做有趣的事情,直到您的用户访问权限正常工作。

我为你勾勒出的是一个正常形式的数据库。没有文本数据重复,数据易于检索、索引和显示。我确实觉得这个问题对于 SO 来说太宽泛了,因为为您设计数据库有点超出范围,但我确实认为一般格式很有用。

每个表应该只包含唯一的必要数据,例如:

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。

其他表应以相同方式创建。whoadd 和 when added 列是可选的,非常需要存储空间,但非常有用。inuse 是必不可少的,将其设置为 BOOL,您可以在不删除团队的情况下删除团队 - 数据不会丢失。whenremoved 和 whoremoved 对于审计也很有用。

关于密码的一句话 - 请确保将这些存储为 SALTED HASH。如果你这样做,当你的网站被黑客入侵时,没有人会暴露他们也用于网上银行的密码。人们往往是白痴。你必须照顾他们。

正如我所说,有点超出范围,所以我将在那里结束答案 - 它根据要求为您提供了第四范式 Db 的基本轮廓,它将是健壮和可扩展的,但让您完成工作。如果问题太难了,为什么不问更多问题。

祝你好运。

添加:

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 的唯一地方。

使用您的 $_SESSION 存储需要在页面之间保留的信息。

这些文件可以像您喜欢的那样简单或复杂 - 我在很久以前创建了自己的文件,它对用户和会话进行了多次检查,并且可以在页脚中显示脚本、自定义 CSS 文件等。如果您从简单开始并根据需要进行构建,这并不难。SO将在这里为您提供帮助。

提醒一句:虽然你可以开始很简单,但你想做的事有腿,会失控。请在您的代码启动并运行后对其进行审核,以确保您没有无意中包含安全漏洞。当您进入项目并需要快速修复时,很容易将它们包含在内,除非您正在寻找它们,否则以后很难发现它们。

于 2013-08-22T10:27:58.687 回答
1

我站在你的立场上,我发现的最佳解决方案是使用后端即服务 (Baas) 提供商,例如 Parse.com 或 Stackmob.com 或许多其他提供商。他们为您完成数据库托管以及您的用户管理(登录/注册/忘记密码等),因此您不必担心。您可以通过 REST API 访问它们,并且它们在 Github 上也有 PHP 库。

由于您是数据库管理的新手,这是一项非常重要的任务,因此此解决方案可能会为您省去一些麻烦。

当然,您仍然需要决定如何组织您的表(或 Parse 中的“类”,Stackmob 中的“模式”等),但它们也提供了关系 API 的帮助。他们有一个预定义的用户表,专门用于存储用户。

当然,他们的 API 不如 SQL 灵活,但它也可以避免 SQL 注入,这是这种灵活性的一个缺点。另一方面,他们还提供自定义代码来增强这种灵活性。

编辑。忘了提一下,那些 BaaS 平台还允许将数组存储为数据库字段,这真的很方便。

于 2013-08-25T05:56:49.193 回答
1

这可能是一个很大的构建。您可能想尝试现有的联赛管理服务。外面有几个。我认识一些使用Mamopolis的朋友,他们对这项服务非常满意,我认为它可以满足您的所有需求。

于 2013-09-09T19:49:49.727 回答