2010-11-09 38 views
0

嗨,我有3個名爲STUDENT,COURSE和ENROLLMENT的表。學生有一個PK的S_ID(學生ID)和COURSE有PK的C_ID(課程ID)。在註冊時,它只有S_ID和C_ID。我有一個對象數據源,在下拉菜單中顯示所有學生的姓名(在文本中,S_ID爲值),它將顯示使用數據網格和另一個對象數據源在點擊時註冊了哪些課程。我不想讓學生也有多個課程需要註冊,但我不能這樣做,因爲你不能在COURSE表中輸入相同的ID,所以每個學生只能註冊一門課程。表和SQL邏輯的ASP.NET C#問題

是否有某種選項可以在表中使用相同的ID?

如果沒有,那我肯定一些如何操縱C_ID字符串中的課程表,因爲所有的課程,ISDVXXX或ITSXXXX或HGFXXXX啓動。這可能很難理解,但希望有人會幫助。

一個例子可以幫助 所以,如果一個名爲喬的123 S_ID學生註冊到ISDV,他將被註冊到所有以ISDV開始的課程。但我的問題是,我的課程表必須爲每門課程設置獨特的ID,例如ISDV123,ISDV346,ISDV395等......所以這也毀了我的註冊表,因爲我不能簡單地在那裏安裝ISDV,它需要一個特定的課程,但他向所有人登記。任何更多的澄清,將獲得:P謝謝...

回答

1

什麼你」重新嘗試解決是一個多值屬性問題。基本上,你有兩個表,其中一個(students)的主鍵是另一個表中的外鍵(classes)。您不希望在classes表中擁有同一班級的倍數,但您確實希望student能夠擁有多個classes

所以,有一個很簡單的解決,您創建一個包含至少這兩列另一個表:student_id數據和類標識碼。通過這種方式,你可以有一個class多個students鏈接到,也多次classes其中student可以鏈接到到。

1

你所尋找的是一個多對多的關係 - 即一個學生可以有多個課程,一門課程可以有多個學生。所以你的鏈接表(這是你想要註冊的嗎?)應該有兩列,一個是課程ID,一個是學生ID。

所以,如果你有學生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

您的註冊表代表Studend和課程表之間的m:n關係。

例如與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)。 這裏要理解的重要一點是,註冊表中的每一行代表一個學生註冊課程,並且不需要除學生ID和課程ID以外的其他字段,這兩個字段一起標識註冊。