数据库一对多、连接表问题
在同一张表中主键为stu_no(学号)外键为cou_no(课程号)学号与课程号为多对多关系,在同一个表中可以同时这连个字段吗?stu_no为主键就不可以重复了!就不满足多...
在同一张表中主键为stu_no(学号)外键为cou_no(课程号) 学号与课程号为多对多关系,在同一个表中可以同时这连个字段吗?
stu_no为主键就不可以重复了!就不满足多对多关系了! 展开
stu_no为主键就不可以重复了!就不满足多对多关系了! 展开
4个回答
展开全部
楼主这种,是多对多的关系,我一般是这么处理的。
学生表 (一个主键 学生ID)
课程表 (一个主键 课程ID)
学生选课表
主键为2个字段 学生ID、课程ID
同时建立外键约束
学生选课表中的 学生ID,必须在学生表中存在。
学生选课表中的 课程ID、必须在课程表中存在。
因为 一个学生,选一门课程,是唯一的了。 可以作为主键了。
没有必要再去折腾一个 “选课ID” 作为主键。 然后再给 学生ID 与 课程ID 创建个唯一性的索引。
--
除非是这种情况:
这个 中间的 选课表, 还包含 时间信息的字段.
例如 学生 张三
2010年 选修 Oracle 数据库课程
2011年,又选修 Oracle 数据库课程
2012年,还选修 Oracle 数据库课程
那么,这种情况下, 可以设置 一个由数据库管理的 自增的 "选课ID" 来确保唯一性。
学生表 (一个主键 学生ID)
课程表 (一个主键 课程ID)
学生选课表
主键为2个字段 学生ID、课程ID
同时建立外键约束
学生选课表中的 学生ID,必须在学生表中存在。
学生选课表中的 课程ID、必须在课程表中存在。
因为 一个学生,选一门课程,是唯一的了。 可以作为主键了。
没有必要再去折腾一个 “选课ID” 作为主键。 然后再给 学生ID 与 课程ID 创建个唯一性的索引。
--
除非是这种情况:
这个 中间的 选课表, 还包含 时间信息的字段.
例如 学生 张三
2010年 选修 Oracle 数据库课程
2011年,又选修 Oracle 数据库课程
2012年,还选修 Oracle 数据库课程
那么,这种情况下, 可以设置 一个由数据库管理的 自增的 "选课ID" 来确保唯一性。
展开全部
vc 可以访问很多数据库,比如Access、SQL servel、MYSql、Orcal等数据库系统。也有很多数据库访问技术,比如ADO、ODBC、OLE DB等。每一种数据库系统都提供了一系列的API,在程序中可以通过编码的形式调用相应的API进而对数据库操作。
你学一个vc++访问ADO数据库吧,难点,但是很实用!
1、导入ADO库
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用导入的动态库的指针操作数据库.
打开数据库连接
_ConnectionPtr m_pConn; // 数据库连接指针
// 创建Conneciton对象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn为你连接数据库的信息,你应该按照你的要求打开数据库
然后你用打开的那个连接进行操作数据库。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作数据库的SQL语句。在这个SQL语句里你可以创建表、更新表等。
用ADO访问的时候要求初始他COM库和释放COM对象
// 初始化COM环境(库)
::CoInitialize(NULL);
//释放COM对象
::CoUninitialize();
核心的就这些了,你再看一下相关的书籍吧。
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
你学一个vc++访问ADO数据库吧,难点,但是很实用!
1、导入ADO库
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用导入的动态库的指针操作数据库.
打开数据库连接
_ConnectionPtr m_pConn; // 数据库连接指针
// 创建Conneciton对象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn为你连接数据库的信息,你应该按照你的要求打开数据库
然后你用打开的那个连接进行操作数据库。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作数据库的SQL语句。在这个SQL语句里你可以创建表、更新表等。
用ADO访问的时候要求初始他COM库和释放COM对象
// 初始化COM环境(库)
::CoInitialize(NULL);
//释放COM对象
::CoUninitialize();
核心的就这些了,你再看一下相关的书籍吧。
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多对多应该做成关系表
学生表----学号课程表-----课程表
学号课程表以学号和课程号为主键
学生表----学号课程表-----课程表
学号课程表以学号和课程号为主键
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以建立一个中间表管理这两个表之间的关系!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询