2012-04-02 61 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