2012-04-02 62 views
1

編輯:是一個設計問題複合主鍵 - 使用更新命令。如何增加

我的最終修訂ERD http://i.imgur.com/cgUC7.png

我經歷了ALEVEL計算的計算項目。該項目由一個6表格Microsoft Access數據庫組成。我正在使用vb.net爲學生跟蹤系統編寫應用程序。

我ERD低於: http://i.imgur.com/Xl0gS.png

我的問題:如何插入一個新的複合主鍵到現有的表? 如果我增加StudID和CourseID在tblContact然後我需要增加他們在tblStudentCourse導致沒有指向正確的方向記錄..

爲強制執行我使用與數據集的.relations的關係。

'Student - StudentCourse 
    DS.Relations.Add(New DataRelation("StudStudCorRelation", DTStudents.Columns("StudID"), DTStudentCourses.Columns("StudID"), True)) 
    'Course - StudentCourse 
    DS.Relations.Add(New DataRelation("CourStudCorRelation", DTCourses.Columns("CourseID"), DTStudentCourses.Columns("CourseID"), True)) 

    StudCourseCompPK(0) = DTStudentCourses.Columns("StudID") 
    StudCourseCompPK(1) = DTStudentCourses.Columns("CourseID") 
    StudCourseContactCompPK(0) = DTContacts.Columns("StudID") 
    StudCourseContactCompPK(1) = DTContacts.Columns("CourseID") 
    StudCourseStudTMACompPK(0) = DTStudentTMAS.Columns("StudID") 
    StudCourseStudTMACompPK(1) = DTStudentTMAS.Columns("CourseID") 
    'Enforces the relations between these 2 keys 
    DS.Relations.Add(New DataRelation("CPKContact", StudCourseCompPK, StudCourseContactCompPK, True)) 
    DS.Relations.Add(New DataRelation("CPKStudentTMA", StudCourseCompPK, StudCourseStudTMACompPK, True)) 
    DS.EnforceConstraints = True 

    DTStudentCourses.PrimaryKey = New DataColumn() {DTStudentCourses.Columns("StudID"), DTStudentCourses.Columns("CourseID")} 

但這裏的最後一行:

DTStudentCourses.PrimaryKey = New DataColumn() {DTStudentCourses.Columns("StudID"), DTStudentCourses.Columns("CourseID")} 

需要使用檢索來自tblStudentCourse這我不確定什麼待辦事項

如果任何人都可以在這個問題看看鑰匙我會很感激。

哈利

修訂ERD

enter image description here

+0

我認爲如果您添加作業標籤並減少添加複合鍵,*小*代碼以顯示意願以及某些表格模式,您將有更好的答覆機會。 – Fionnuala 2012-04-03 11:14:00

+0

爲什麼你在tblContact中獲得CourseID?如果聯繫人僅與學生課程組合相關,那麼必須在聯繫人有關之前創建學生課程?如果聯繫人僅與學生有關,則不需要課程編號。在學生課程表上可能需要考慮自動編號。我認爲你的問題可能是由於設計問題,所以可能值得在設計上發佈一個問題。 – Fionnuala 2012-04-03 22:00:36

+0

'你爲什麼要在tblContact中獲得CourseID?'因爲我認爲我需要強制執行tblStudentCourse和tblContact之間的一對多關係,除非我需要使用另一個外鍵? – Apple 2012-04-04 10:44:36

回答

0

如果我增加StudID和CourseID在tblContact那麼我就需要 增加他們tblStudentCourse導致沒有指向 到記錄正確的方向。

不,值僅在一個表中增加。無論你使用那些遞增的值,你基本上都會複製它們。

因此tblStudent.StudID可能是一個整數,每個新學生都會增加一個整數。 tblCourse.CourseID可能是一個整數,每個課程都會增加一個整數。要將數據存儲在tblStudentCourse中,需要從tblStudent.StudID中複製一個適當的現有整數,並從tblCourse.CourseID中複製另一個適當的現有整數。

StudID只在一處增加 - tblStudent。 CourseID只在一處增加 - tblCourse。

+0

因此,當創建新的聯繫人記錄時,tblContact中的StudID和CourseID值將與tblStudent中的相同, tblCourse?因爲我仍然需要強化tblStudentCourse和tblContact之間的多對多關係,因爲學生可以有很多聯繫時間。 – Apple 2012-04-04 10:38:37

+0

@Apple:如果我正確理解您的設計,當您創建新的聯繫人行時,StudID和CourseID的值將匹配tblStudentCourse中的一行。這保證了聯繫是關於一個學生實際上的課程。(「學生可以有很多聯繫時間」描述了一對多的關係。) – 2012-04-04 11:05:16

+0

這是正確的,但是(這是我的知識分崩離析)使用複合詞主鍵在tblstudentCourse中的值肯定必須是另一組新鍵?防爆。當沒有CPK交易時,你會有一個例如ContactID將會在tblContact和tblStudentCourse(注意忽略與Remou atm的convo)。因此,與tblContact相關的新值必須位於另一個魔術存儲位置,即合併2個外鍵以創建複合主鍵。我不知道這個位置在哪裏...... – Apple 2012-04-04 11:15:17