ASP.NET и сценарий «один-ко-многим-ко-многим»
-
21-08-2019 - |
Вопрос
Я новичок в ASP.NET, но не в программировании.Я переношу наш текущий сайт с PHP/MySQL на ASP.NET(3.5)/SqlServer.Я скрываюсь здесь с момента запуска сайта, поэтому уверен, что один (или несколько) из вас смогут мне помочь.Вот сценарий:
Это сайт отдела обучения и кафедры.в таблице хранится каталог курсов course
.Каждый курс может включать множество обязательных курсов. Например, A и B являются обязательными для C.Обычно я сохраняю это либо как столбец, разделенный запятыми, в course
или в отдельной таблице course_prereq
или course_course
как рекурсивное отношение.Эту часть я могу сделать.
Однако бизнес-правила требуют, чтобы каждый курс мог иметь несколько наборов предварительных условий.Например, N
требует A
, B
и C
, или N
требует X
и Y
.Вот где я застрял.
Раньше я хранил эту информацию в столбце для строки N
как A,B,C|X,Y
, проанализировал идентификаторы в 2D-массив PHP, отправил второй запрос для всех строк, идентификаторы которых находились в этом массиве, а затем использовал PHP для разделения этих строк на соответствующие группы.После завершения всей этой обработки группы предварительных условий отображаются на веб-странице в виде отдельных таблиц, например:
| A | A's information goes here |
| B | B's information goes here |
| C | C's information goes here |
- - - - - - - OR - - - - - - - -
| X | X's information goes here |
| Y | Y's information goes here |
Как мне это сделать с помощью ASP.NET?
Решение
Добавить стол для хранения Prerequisite Sets
.Эта таблица содержит идентификатор набора и ключ к таблице курсов для каждого курса в наборе.В таблице может быть несколько строк для данного идентификатора набора, поэтому вашим первичным ключом будет идентификатор набора. плюс идентификатор курса.Тогда в твоем course_prereq
В таблице вы соотносите курсы с различными наборами пререквизитов.Ан OR
здесь можно предположить взаимосвязь, поскольку любое AND
s применяются в самих наборах.
Другие советы
Создайте таблицу PrequireSet, которая FK соответствует каждому предварительному требованию.Затем создайте таблицу Course_PrequireSet многие-ко-многим, которая FK соответствует курсу и набору предварительных требований.В большинстве случаев в Course_PrerequistieSet будет только одна запись, но если их несколько, то это будет отношение ИЛИ.
Оба ответа выше были очень полезны.В итоге я использовал только одну таблицу базы данных вместо предложенных двух.В таблице содержится course_id
, prereq_id
, и set_id
, которые все вместе образуют первичный ключ.
На странице ASP.NET я использую повторитель для обхода хранимой процедуры sqldatasource, которая возвращает наборы предварительных требований курса, и представление сетки внутри этого повторителя, которое считывает индивидуальную информацию о предварительных требованиях из второй хранимой процедуры sqldatasource.Так:
RepeaterSqlDataSource
(возвращает идентификаторы наборов)
Repeater
. . .GridViewSqlDataSource
(возвращает информацию о курсе для каждого prereq_id в наборе
. . .GridView
Надеюсь, это будет полезно всем, кто сталкивается с подобным сценарием.