Нужна помощь в проектировании базы данных - PullRequest
0 голосов
/ 18 марта 2011

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

В таблице будут храниться результаты 3 экзаменов.

  1. Экзамен A: 8 обязательных предметов с бесконечным необязательным предметом.
  2. Экзамен B: 6 обязательных предметов сбесконечный необязательный предмет.
  3. Экзамен C: 1 обязательный предмет с 4 необязательными предметами.

Особенность, которую следует иметь в виду:

  1. Результат каждого предмета долженбыть доступным для поиска (например: Найти A для математики в экзамене A)
  2. Базовый общий расчет (например: рассчитать, сколько в математике для экзамена A)

Просто вставив данные, я будуОднако я могу думать о чем-то, но при объединении функций это просто не сработает.

В крайнем случае у меня есть единственная таблица: studentid, экзамен, субъект-код, результат.Это будет работать как в режиме поиска и расчета, однако в долгосрочной перспективе у меня возникло ощущение очень грязной и огромной базы данных.

Мой текущий дизайн (предоставленный моим другом): у каждого объекта и его результата есть свое поле,Это работает, но очень трудно расширить (добавить больше предметов).

Любые рекомендации?

Ответы [ 2 ]

1 голос
/ 20 марта 2011

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

1 голос
/ 18 марта 2011

Возможная структура таблицы (без определения столбцов):

Exam
---------
Exam_ID
Exam_name 
number_of_req_subjects
number_of_opt_subjects  <---- -1 could be infinite

Subject
-----------
Subject_id
subject_name

exam_subject
------------
exam_subject_id
exam_id
subject_id
required

exam_result
------------
exam_result_id
exam_subject_id
result  

Чтобы получить число A для математики в экзамене A:

SELECT count(exam_result_id)
FROM exam_result er, exam_subject es, subject s, exam e
WHERE er.exam_subject_id = es.exam_subject_id
AND es.subject_id = s.subject_id
AND es.exam_id = e.exam_id
AND e.exam_name = 'A'
AND s.subject_name = 'MATH'

(я знаю, что объединение было бы лучше, чем объединение разных таблиц, но я немного ленив).

В результате поиска предметов ... у нас недостаточно информации. На самом деле, мой ответ может быть полностью отклонен, но, насколько я думаю, я могу получить его с помощью данной информации на данный момент. Создание чего-то для поиска - это всего лишь вопрос создания достаточно полезного выбора.

...