2014-12-10 4 views
-1

Я учитель PE, пытающийся создать базовую базу данных mySQL для наших студентов и родителей, чтобы увидеть их результаты. Я делаю чтение, и я надеюсь, что я на правильном пути!Школа бегущего клуба - mySQL Database design

Соответствуют ли эти таблицы?

CREATE TABLE IF NOT EXISTS `Students` (
    `StudentID` INT NOT NULL , 
    `Firstname` VARCHAR(45) NULL , 
    `Surname` VARCHAR(45) NULL , 
    `DOB` DATE NULL , 
    `Class` VARCHAR(45) NULL , 
    `Year` VARCHAR(45) NULL , 
    `House` VARCHAR(45) NULL , 
    PRIMARY KEY (`StudentID`)) 

CREATE TABLE IF NOT EXISTS `Races` (
    `RunID` INT NOT NULL , 
    `StudentID` VARCHAR(45) NULL , 
    `Date` DATETIME NULL , 
    `Distance` INT NULL , 
    PRIMARY KEY (`RunID`)) 

Конец игры запросить следующий тип результатов: Еженедельно 10 лучших бегунов

Weekly - какой класс/дом/год Уровень имели большинство детей, посещающих и большинство километров запустить

Всего КМ в перспективе и т.д.

Любые мысли высоко оценили =)

+1

Хотя есть несколько очевидных улучшений (сохраняя тип данных StudentId одинаковым в обеих таблицах, makign первичные ключи auo_number, возможно, имеющие дополнительную таблицу для отношения «Дом») и некоторые менее очевидные, которые являются первичными (у меня будет отдельная таблица для класса и другая таблица для членства в классе, но это не значит, что вы * имеете *) –

+0

В таблице учеников хранится постоянная информация об ученике. Класс и год, похоже, не принадлежат. Тем не менее, хорошая шикарная школа! – Strawberry

+0

@RowlandShaw - Я думал, что, возможно, был так (House/Class/Year и т. Д.). Было бы проблемой создание таблицы: CLASSTABLE 'ClassID' ' ClassName' – sletts02

ответ

0

Races.StudentID должны быть внешний ключ до Students. Выполните следующие alter после создания таблиц

ALTER TABLE Races 
ADD CONSTRAINT FK_Races_Students FOREIGN KEY (StudentID) 
REFERENCES Students(StudentID); 

Вы используете VARCHAR для хранения studentid в Races таблице, которая имеет недостатки производительности при соединении двух таблиц. Вместо этого сделайте Races.StudentID равным int, за которым следует скрипт изменения внешнего ключа.

Вы также можете подумать о добавлении AUTO_INCREMENT в свои первичные поля ключа.

CREATE TABLE IF NOT EXISTS `Students` (
    `StudentID` INT NOT NULL AUTO_INCREMENT, 
... 

CREATE TABLE IF NOT EXISTS `Races` (
`RunID` INT NOT NULL AUTO_INCREMENT, 
... 

Это автоматически увеличит первичные ключи, и вы можете опустить их в своих запросах вставки.

+1

Это зависит от используемой версии MySQL и механизма хранения таблиц –

+0

Извините, я должен был уточнить. Мое рациональное использование VARCHAR для StudentID заключается в том, что идентификатор студента предварительно заполнен нашим программным обеспечением района. т.е. jblogs1, dsmith3. Дети уже используют их, поэтому это лучшее решение? Я рад за отзывы, это моя первая трещина в дизайне базы данных. – sletts02

+0

@RowlandShaw - Я читал еще немного. Кажется, что «суррогатные ключи» лучше, чем естественные ключи. Поэтому я предполагаю, что в моем случае использования StudentID и RunID нуждаются в автоматическом добавлении целых чисел, затем в другой столбец с сохраненным естественным ключом. Так высоко ценим дизайнеров баз данных прямо сейчас! – sletts02