I need a registration database for a scholastic competition with entries from a number of schools. I will need some security so that they can't see or edit the back end, and different views for different roles (i.e., registration, scoring, personal information for the student entrants -- they're minors, so security is very important there -- and result reporting). Sanity checks against scheduling conflicts would be a HUGE nice-to-have. I can do updating if what we first come up with doesn't work. I'm comfortable in SQL, so I don't mind making it better, but don't have the time to do it from scratch.
There are about 550 students who will attend the annual Junior Classics League event. There are a wide variety of events, including academic and artistic competitions. In total, there are over 100 events. Most will compete in 4-8 of them, and all must compete in at least two academic events. The students themselves should be able to Register to attend and sign up for events online. Each event has a meeting time. The signup sheet needs to include the student's name, age, grade, school and personal information (gender, parent/guardian contact information, health insurace information, allergies/needs, etc.)
The first challenge is this registration page. Ideally, we would like to divide the events up by type of events. Choosing a drop down of one of those should bring up another drop down with the corresponding events. So if I go to sign up, I should be able to choose oratory from a list, and then have the next box populate with the events that fit into that category. (Obviously, I have a spreadsheet with all of the events.) Once I've done that, level should autopopulate (where divided, mostly in academic events, 7th-9th graders compete against each other and 10th-12th graders compete against each other). If needed, I can fix that in the SQL database if, for example, a mentally challenged child is allowed to compete in the lower level. But it should default based on that.
The sanity check I mentioned is just a check that the student did not sign up for two events that meet at the same time. If they do, an error box should pop up saying that the registration is wrong.
Once the students have signed up (there is no need to collect money from the student) we need a report by school. Again, if you don't want to program this as a web page, I can easily enough print out a report grouping by school in MySQL.
The next step is assigning judges for each event. Each judge should have a score sheet with the student's ID number, but NOT the student's name or school, along with the name and level of the event that she or he is judging. Once they've done so, we need a web page to input the scores for each competitor. I think this would be easiest with a different judge's page. The judge inputs his/her judge number, and it pulls up a list of student IDs. The judge then inputs the score for each student s/he saw. This ensures that no judge can input scores for an event s/he didn't see. As such, each judge should also need to sign in and have a password.
Once all the scores are entered, we need two sets of reports. The first is by school. Which school did the best? The second is by student. Which student did the best in each event and overall.
Note that I know how to code some, so I can adjust anything that the schools don't like. (I'm friends with a teacher, but not a teacher myself; she doesn't know I'm paying someone else to get me started out of my own pocket.)
Before I award this, please let me know how these requirements will add to the cost. I understand that they do, but want to know what I'm getting into before I award the job. Thank you.
My proposed schema. I'm not a professional, so I'm not sure, but this is how I think it works: I'm sure I'm missing some things. That's why we HIRE professionals.
STUDENT TABLE (All student fields denoted by S_):
SchoolID (Foreign key to school table)
SCHOOL TABLE (Denoted by an L_ to distinguish it from students):
JUDGES TABLE (All Judge Fields denoted by a J)
There are some reports as well.