Дизайн базы данных для предпосылок класса - PullRequest
1 голос
/ 06 ноября 2010

В настоящее время я работаю над образцовой системой регистрации классов, для которой мне необходимо поддерживать предварительные требования к классам.Я должен отобразить предварительные условия класса на странице в виде логического выражения.Пример: если ученик просматривает класс A, предварительные условия должны отображаться как (B и C) ИЛИ D

. Я не уверен, как с этим справиться.

Дизайн пока: класс имеетмного разделов.Класс (* deptartment, номер_класса *, описание)

Курсив - это первичные ключи.Любые предложения по обработке предпосылок ??

Пример данных для курса: (CMSC, 201, программирование 1) (CMSC, 202, программирование 2) (CMSC, 203, дискретные структуры) (CMSC, 341, структуры данных)

Ответы [ 3 ]

1 голос
/ 06 ноября 2010

Чтобы добавить к предложению Даффимо отношения один ко многим, добавьте группировку к этому отношению. Идентификатор группы будет вашей круглой скобкой. Так что ваш стол может выглядеть так:

class_id, prereq_group, prereq_id
1, 1, B
1, 1, C
1, 2, D

prereq_group должна быть уникальной только в пределах class_id и может быть последовательным числом. Если prereqs имеют одинаковый идентификатор группы, то они будут AND. Различные идентификаторы групп будут ИЛИ. Таким образом, в приведенном выше примере это будет (B и C) ИЛИ (D).

1 голос
/ 06 ноября 2010

Раздел не имеет отношения к предпосылкам.

Звучит как отношение один ко многим.

Я не уверен, должен ли проходной балл быть частью ваших предпосылок.Если да, у вас есть больше работы, потому что вам понадобятся таблицы Student и ReportCard для управления предварительными условиями.

0 голосов
/ 06 ноября 2010

Похоже на случай нетривиального дизайна ... Что касается дизайнов БД, которые я видел, не может быть ни одного условия объединения без потери 1NF на этом.

Предлагаемое решение, которое может встретиться с несколькими самостоятельными объединениями безпотеря 1NF-

Предполагая, что по классу вы имеете в виду курс ... предварительные условия (prerequisite_id (pk), class_no * (fk), отношение, Linked_Prerequisites (fk) *)

, если Linked_Prerequisites равно null, мыможно использовать, чтобы объединить все строки, доступные под определенным class_no, чтобы найти все предпосылки.

например,

Prerequisites(prerequisite_id,class_with_prerequisite,class_id_of_prerequisite, relationship, linked_prerequisites)
1,1,2,and,2
2,1,3,null,null
3,1,4,or,null

--------------

Class(*deptartment, class_number*(pk), description) 
12,1,classA
12,2,classB
12,3,ClassC
12,4,ClassD
--------------

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

Если вы сами поддерживаете данные, вы можете манипулировать ими, чтобы работать на одном уровне, ориентированном награфик, с которым вам нужно написать только одноуровневое соединение.

...