Intereting Posts
Laravel 4 – общедоступный каталог обрабатывается как маршрут – изображение не отображается В чем смысл E_ALL | E_STRICT, если это то же значение, что и E_ALL? как проверить, обновляется ли база данных с помощью php и ajax? Преобразование широты / долготы в название города? (обратная геолокация) получить все изображения из папки в php Как узнать, когда пользователь закрывает браузер? Приложение чата Есть ли установленный тайм-аут в php? Как я могу пометить пользователя на фотографии с помощью API-интерфейса Facebook? Найти общее количество результатов в mySQL-запросе со смещением + предел Приличное поведение AppKernel.php ZF2: эквивалент getServiceLocator в форме Zend Доктрина 2: построение дерева вложенных массивов из самоподдерживающейся сущности Как понизить Wampserver PHP и Apache? правильные методы шифрования PHP mcrypt? Ошибка сертификата SSL не может получить сертификат локального эмитента

MySQL – организация содержимого базы данных (спортивная лига)

Я разрабатываю решение PHP / MySQL для моей молодежной атлетической организации, которая будет отображать графики и турнирные таблицы для команд, участвующих в любом сезоне. К сожалению, я просто изучаю веревки, когда речь заходит о дизайне базы данных, и у меня есть небольшая проблема, охватывающая мой мозг вокруг того, что должно быть относительно простой концепцией. Возможно, кто-то может вмешаться и прояснить несколько моментов?

Я не понимаю, как правильно структурировать базы данных и таблицы для правильной работы. Это то, что мне в конечном итоге нужно настроить:

  1. У нас около 50 школ-членов. Каждому потребуется их собственный идентификатор входа и пароль. Я думал об их хранении в своей отдельной базе данных, потому что учетные записи будут повторно использоваться каждый раз в каждом сезоне, чтобы представлять команды и разрешать тренерам регистрироваться и обновлять результаты своей игры.

  2. В каждом сезоне есть два разных вида спорта. Например, на предстоящем осеннем сезоне есть женская волейбольная лига и футбольная лига мальчиков. Каждая лига имеет несколько дивизий (разделенных географическим регионом), в которых школы играют свой график регулярного сезона. Я не уверен, что каждый сезон нуждается в отдельной базе данных, каждой лиге и т. Д.

  3. Регулярный сезон каждого подразделения будет импортирован из программы планирования (через электронную таблицу Excel) и отображен на собственной веб-странице, где школы могут просматривать свои предстоящие игры и регистрироваться для обновления результатов.

  4. По мере обновления результатов игры мне нужно будет найти способ отразить эти результаты на отдельной веб-странице, на которой отображаются рейтинги лиги этого подразделения.

Для более ясной демонстрации того, что я пытаюсь сделать, посмотрите на эти две макетные страницы, которые я создал для расписаний и данных в таблице:

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

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

Вот где я ищу свое руководство. Как именно я должен структурировать структуру MySQL для всех этих данных?

Я думаю о отдельной базе данных для идентификаторов входа в школу, а затем отдельную базу данных для каждого сезонного спорта (например, Boys Volleyball 2013) с отдельными таблицами для каждого подразделения и количеством столбцов x для представления графиков и позиций в них.

Звучит ли это правильно? Я думаю, что все это неправильно? Любая помощь или руководство, помогающее выработать этот процесс мышления, будет очень оценено!

Спасибо огромное!

Уч. Вы заняли большую работу. Вы абсолютно уверены, что ничего, что вы собираетесь сделать, не может быть сделано тем, что уже доступно? Ну, если вы уверены, читайте дальше.

Во-первых, самая сложная часть того, что вы хотите сделать, – это управление доступом пользователя. Я бы посоветовал вам начать с написания вашего модуля управления пользователями, прежде чем идти дальше.

Для того, что вы хотите, кажется вероятным, что Drupal или одна из других старших систем CMS будет отличным способом загрузки системы. Drupal будет обрабатывать ваше управление пользователями прямо из коробки (или с минимальными проблемами), и вы можете записать остальную часть своего кода как статические узлы. Это также позволяет легко добавлять блоги, форумы, новости и управлять списками рассылки и т. Д.

Как указано в комментариях выше, вам необходимо сохранить свои данные вместе. было бы неплохо сохранить данные для исторических сравнений.

Если вы не продлеваете CMS, после того, как вы вернетесь от психиатра, вам понадобится что-то вроде:

  1. заголовочный файл для доступа к db и проверки подлинности пользователя.

  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. 

Как вы можете видеть, вам нужны справедливые несколько таблиц, но ВЫ НЕ ДОЛЖНЫ пытаться делать забавные вещи с настоящими командами, если у вас есть доступ к вашему пользователю.

То, что я набросал для вас, это db в нормальной форме. Никакие текстовые данные не дублируются, и данные легко извлекать, индексировать и отображать. Я действительно чувствую, что этот вопрос слишком широк для SO, поскольку разработка базы данных для вас немного отличается от области применения, но я считаю, что общий формат полезен.

Каждая таблица должна содержать только уникальные данные, например:

 Person: personid int, surname, forename, style, whenadded, whoadded, inuse email: emailid, email, whenadded, whoadded, inuse email_person: emailpersonid,emailid,personid, whenadded,whoadded,inuse 

Это позволяет нескольким пользователям делиться одним электронным письмом и несколькими электронными письмами, которые будут применяться к одному человеку без дублирования текста. Идентификаторы должны быть типа INT AUTO_INCREMENT PRIMARY KEY, а не SERIAL, так как это экономит много места для хранения, и вы никогда не будете заполнять INT в этом приложении.

Другие таблицы должны быть созданы таким же образом. Колонки whoadded и whenadded являются необязательными и довольно голодными, но могут быть очень полезными. inuse очень важно установить это на BOOL, и вы можете удалить команды без их удаления – данные не будут потеряны. A whenremoved и whoremoved полезен также для аудита.

Слово на паролях – пожалуйста, убедитесь, что вы храните их как СОЛЬОВЫЕ. Если вы это сделаете, когда ваш сайт будет взломан, никто не получит пароль, который они также используют для их интернет-банкинга. Люди часто идиоты. Вы должны заботиться о них.

Как я уже сказал, немного вне сферы действия, поэтому я закончу ответ там – он дает вам, как просил базовый план 4-й нормальной формы Db, которая будет надежной и расширяемой, но оставит вас делать работу. Почему бы не задать больше вопросов, если проблема окажется слишком сложной.

Удачи.

ДОБАВЛЕНО:

Сделай сам:

Если вы не хотите учиться использовать одну из существующих фреймворков или 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:); ?> 

Следует подчеркнуть, что это минимальный минимум, который вам понадобится, и он действительно сосут – он просто представлен, чтобы показать, как это следует начинать, а не пример идеального кода. Это будет работать.

Ключ создает заголовок, который представляет нужные вам переменные, такие как соединение db, имя пользователя, статус входа в систему и т. Д., А нижний колонтитул вы можете вводить данные для представления данных. Нижний колонтитул – единственное место, где вы совмещаете HTML и PHP.

Используйте $ _SESSION для хранения информации, которая должна сохраняться между страницами.

Эти файлы могут быть такими же простыми или сложными, как вам нравится. Я создал свои собственные веки назад, которые выполняют несколько проверок пользователя и сеанса и могут отображать сценарии, пользовательские файлы CSS и т. Д. В нижнем колонтитуле. Это непросто сделать, если вы начинаете простенько и строитесь по мере необходимости. SO будет здесь, чтобы помочь вам.

Одно предостережение: хотя вы можете начать очень просто, то, что вы пытаетесь сделать, имеет ноги и выйдет из-под контроля. Пожалуйста, проверьте свой код после его запуска и работы, чтобы убедиться, что вы не случайно включили в себя недостатки безопасности. Их очень легко включить, когда вы попадаете в проект и нуждаетесь в быстром исправлении, и их может быть трудно обнаружить позже, если вы их не ищете.

Я нахожусь на вашем месте, и лучшим решением, которое я нашел, было использование Backend в качестве сервисного (Baas) провайдера, такого как Parse.com или Stackmob.com или многих других. Они делают полный хостинг баз данных для вас плюс ваше управление пользователями (login / register / forget_password и т. Д.), Поэтому вам не нужно беспокоиться об этом. Вы обращаетесь к ним через REST API, и у них также есть библиотеки PHP на Github.

Поскольку вы новичок в управлении базой данных, что является нетривиальной задачей, это решение может сэкономить вам некоторую головную боль.

Конечно, вам все равно нужно решить, как организовать ваши таблицы (или «классы» в Parse, «schema» в Stackmob и т. Д.), Но они также предоставляют помощь с их API-интерфейсами. У них есть предопределенная таблица пользователей, специально предназначенная для хранения пользователей.

Разумеется, их API не такой гибкий, как SQL, но он также безопасен от SQL-инъекций, что является недостатком этой гибкости. С другой стороны, они также предлагают собственный код для повышения гибкости.

Редактировать. Напоминаем, что эти платформы BaaS также позволяют хранить массивы в виде полей базы данных, что может быть очень удобно.

Это может быть большой сборкой. Вы можете попробовать использовать существующий сервис для управления лигами. Там есть несколько. Я знаю несколько друзей, которые используют Teamopolis и очень довольны сервисом, и я думаю, что он выполняет все, что вы ищете.