Проектирование базы данных - требования к хранению
Предположим, мы хотим хранить университетские курсы и их требования к поступлению в базе данных. Например, бакалавр математики, бакалавр изобразительного искусства, магистр компьютерных наук и т. Д.
Каждый курс имеет свой собственный набор требований и может иметь разное количество общих требований. Например, чтобы иметь право на получение степени бакалавра по математике, вам может потребоваться A по математике и B по физике. Принимая во внимание, что BSc Fine Art может потребовать A в искусстве и что у пользователя есть портфолио. MSc может иметь минимальный возраст 25 лет и т. Д.
Предположим, у нас есть ученик, у которого есть свой набор атрибутов. Таким образом, они могут иметь A по математике и B по физике и C по химии и быть в возрасте 19 лет.
Как мы можем структурировать нашу базу данных так, чтобы она была ориентирована на эффективный поиск. А учитывая характеристики учащегося, как мы можем получить все курсы, на которые они имеют право?
На абстрактном уровне мы ищем все элементы, чьи требования являются подмножеством данных атрибутов.
Я хотел бы реализовать это в MySQL. Схема может быть:
курсы
Я бы
название
требования
course_id
предмет
класс
Но тогда как сделать запрос к таблице, чтобы получить все подходящие курсы, когда у студента есть A по предмету 1, B по предмету 2 и т. Д.
Для того, чтобы курс соответствовал, каждое из его требований должно быть выполнено.
Спасибо заранее, я надеюсь, что мое объяснение не слишком запутанно.
1 ответ
Хорошо. Я думаю, что вам нужен список тем, с кучей идентификаторов тем.
Теперь для запроса вы начнете (или создадите) группу идентификаторов и оценок предмета. Самое простое, что можно сделать, это превратить это во временную таблицу с этими столбцами.
Теперь вы можете выполнить свой запрос, присоединившись к идентификаторам субъектов и добавив "where temp.grade <= course.grade.
Хитрость в этом заключается в подсчете строк. Если в нем столько же строк, сколько указано в курсе, значит, вы успешно нашли соответствие.
Этого достаточно, чтобы вы пошли?