ASP.NET и сценарий «один ко многим ко многим» - PullRequest
0 голосов
/ 20 марта 2009

Я новичок в 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 |<br> | B | B's information goes here |<br> | C | C's information goes here |<br> - - - - - - - OR - - - - - - - -<br> | X | X's information goes here |<br> | Y | Y's information goes here |

Как бы я сделал это, используя ASP.NET?

Ответы [ 3 ]

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

Имейте таблицу с именем PrerequisiteSet, которая FKs для каждого prereq. Затем установите Course_PrerequisiteSet множество ко многим таблицам, которые FKs для Course и PrerequisiteSet. Большую часть времени в Course_PrerequistieSet будет только одна запись, но если их несколько, это будет отношение ИЛИ.

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

Добавить таблицу для удержания Prerequisite Sets. В этой таблице содержится идентификатор набора и ключ к таблице курсов для каждого курса в наборе. Таблица может иметь несколько строк для данного идентификатора набора, поэтому вашим первичным ключом будет идентификатор набора плюс идентификатор курса. Затем в таблице course_prereq вы связываете курсы с различными наборами предварительных условий. В этом случае можно предположить отношение OR, поскольку в наборах применяются все значения AND.

0 голосов
/ 24 марта 2009

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

На странице ASP.NET я использую повторитель, чтобы зациклить хранимую процедуру sqldatasource, которая возвращает наборы обязательных компонентов курса, и представление сетки внутри этого повторителя, которое считывает информацию об отдельных предварительных условиях из второй хранимой процедуры sqldatasource. Как это:

RepeaterSqlDataSource (возвращает установленные идентификаторы)
Repeater
, , , GridViewSqlDataSource (возвращает информацию о курсе для каждого prereq_id в наборе
, , , GridView

Надеюсь, это будет полезно всем, кто смотрит на похожий сценарий.

...