2014-11-30 4 views
0

Недавно меня попросили создать портал, на котором студенты могут загрузить свои технические навыки, такие как: HTML, PHP, C++ и т. Д., А колледж может искать студентов на основе обязательных и дополнительных навыков.Лучшая техника для реализации умственной матрицы

Первоначально я думал о хранении студента и связанных с ним навыков, используя таблицу с двумя столбцами, где первый столбец представляет студент, а второй столбец состоит из всех навыков, связанных с этим учеником, разделенных запятой. Например, 001 HTML, C, C++, JAVA 002 C, JAVA 003 HTML, .NET ... ...

Но теперь я столкнулся с проблемами в поиске запросов и для студента, который имеют соответствующие навыки. Я много пробовал, но не знаю, как это можно добиться.

Любые указатели на методы хранения и алгоритмы поиска и т. Д. Были бы полезны. Помощь очень ценится.

Thanks

+0

1. См. Нормализацию. – Strawberry

ответ

0

Простой способ справиться с этим состоит в том, чтобы иметь три таблицы. Первая таблица содержит студентов и включает уникальный идентификатор для каждого ученика. Вторая таблица содержит навыки и имеет уникальный идентификатор для каждого навыка. Третья таблица предназначена для перекрестных ссылок первых двух и имеет два столбца: «Идентификатор студента» и «Идентификатор навыка».

E.G. Скажем, в таблице навыков есть запись для «C» с идентификатором 1, а для «C++» - с идентификатором 2. У нас есть ученик с идентификатором 1, который знает как C, так и C++. Мы помещаем две записи в перекрестную ссылку, первая запись имеет идентификатор студента 1 и идентификатор навыка 1, вторая запись имеет идентификатор ученика 1 и идентификатор навыка 2.

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