ASP.NET C # проблема с таблицей и SQL-логикой - PullRequest
0 голосов
/ 09 ноября 2010

Эй, у меня есть 3 стола, которые называются СТУДЕНТ, КУРС и ЗАЯВКА. STUDENT имеет PK S_ID (идентификатор студента), а COURSE имеет PK C_ID (идентификатор курса). При регистрации он имеет только S_ID и C_ID. У меня есть источник данных объекта, который отображает все имена учащихся (в тексте и S_ID в качестве значения) в раскрывающемся меню, и он показывает, в каких курсах он зарегистрирован при нажатии, используя сетку данных и другой источник данных объекта. Я не хочу, чтобы студент тоже регистрировался на нескольких курсах, но я не могу этого сделать, потому что у вас не может быть одинакового идентификатора в таблице COURSE, поэтому каждый студент регистрируется только на один курс.

Есть ли какая-то опция, чтобы иметь одинаковые идентификаторы в таблице?

Если нет, то мне нужно как-то манипулировать строкой в ​​C_ID в таблице COURSE, потому что все курсы начинаются с ISDVXXX или ITSXXXX или HGFXXXX. Это может быть трудно понять, но, надеюсь, кто-то поможет.

Пример может помочь Таким образом, если студент по имени Джо с S_ID 123 зарегистрирован в ISDV, он будет зарегистрирован во всех курсах, которые начинаются с ISDV. Но моя проблема в том, что в моей таблице COURSE должен быть уникальный идентификатор для каждого курса, такого как ISDV123, ISDV346, ISDV395 и т. Д., Так что это также разрушает мою таблицу регистрации, потому что я не могу просто иметь ISDV там, ей нужен определенный курс, но он зарегистрирован для всех них. Будут даны дополнительные разъяснения: P Спасибо ...

Ответы [ 3 ]

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

То, что вы пытаетесь решить, является проблемой многозначных атрибутов.По сути, у вас есть две таблицы, где одна (students) имеет первичный ключ, который является внешним ключом в другой таблице (classes).Вы не хотите, чтобы в таблице classes были кратны одному и тому же классу, но вы хотите, чтобы student мог иметь несколько classes.

Итак, есть очень простойисправить, вы создаете другую таблицу, которая содержит по крайней мере эти два столбца: student_id и class_id.Таким образом, вы можете иметь один class, с которым связано несколько students, а также несколько classes, с которыми можно связать student.

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

То, что вы ищете, - это отношения многие ко многим - то есть один студент может иметь несколько курсов, а один курс может иметь несколько студентов.Таким образом, ваша таблица ссылок (это то, для чего вы хотели зарегистрироваться?) Должна иметь два столбца, один для идентификатора курса и один для идентификатора студента.

Так что, если у вас был ученик 123 и ученик 234, и курсы ABCи XYZ, ваша таблица будет выглядеть примерно так:

S_ID   C_ID
123    ABC
123    XYZ
234    ABC

Теперь для вашего PK при регистрации вы можете либо использовать составной ключ, либо добавить уникальный целочисленный RowId (алгоритм Identity или HiLo).

В этом случае ваша таблица регистрации будет выглядеть примерно так:

S_ID    C_ID     RowID
123     ABC      1
123     XYZ      2
234     ABC      3

Затем, чтобы увидеть, в каких классах учился студент, вы могли бы сделать что-то вроде

Select * from courses c 
 inner join enrollments e 
 on c.C_ID = e.C_ID 
 AND e.S_ID = @StudentId
0 голосов
/ 09 ноября 2010

Ваша таблица регистрации обозначает отношение m: n между таблицами Studend и Course.

Например, ваш студент с S_ID = 69 зачислен на курсы с C_ID = ISDVXXX, C_ID = ITSXXXX, C_ID =HGFXXXX Студент может быть зачислен на большее количество курсов, и большее количество студентов может быть зачислено на один и тот же курс, поэтому у вас есть таблица регистрации.В нашем примере регистрация будет иметь следующие строки: (69, ISDVXXX), (69, ITSXXXX), (69, HGFXXXX).Если позже ученик с S_ID = 96 присоединится к курсу с C_ID = ISDVXXX, новые строки таблицы регистрации будут следующими: (69, ISDVXXX), (69, ITSXXXX), (69, HGFXXXX), (96, ISDVXXX).Здесь важно понимать, что каждая строка в таблице регистрации обозначает Студента, зачисленного на курс, и нет необходимости в других полях, кроме идентификатора студента и идентификатора курса, поскольку эти два поля вместе определяютЗачисление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...