首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数据库一对多的表怎么设计呢

2012-08-31 
数据库一对多的表如何设计呢?对于教师表,会有这些属性:教师号,职称,职务,所带课程这里一个老师可以带好多

数据库一对多的表如何设计呢?
对于教师表,会有这些属性:教师号,职称,职务,所带课程
这里一个老师可以带好多课程,如何在数据库里面存这些课程号呢?
一个字段只能存一个课程号,那么对于多个课程如果多次存教师号,职称,职务这三个字段会造成极大的空间浪费,那么这个课程字段该怎样设计好呢?

[解决办法]
在设计的时候,把这种情况考虑为多对多的形式,不要具体的考虑如何实现的问题。在设计完成的时候,需要进行规范化(如第一范式,第二范式等等)。 对于你这个问题你需要将“多对多”的模式转化为“一对多”的形式。 建议搜一搜数据库设计的步骤以及数据库规范化。


[解决办法]
根据你的描述,你要么分两个表,一个存放教师的信息,一个存放课程的信息,两个表中都有教师号,把教师表中的教师号设置为主关键字,课程表中的设置为外部关键字就行了。能满足你的要求,。如何存放这些数据是根据的你的表的设计来存放的。
[解决办法]
多对多,当发生像LZ这样的情况,表A的元素对应多个表B的元素,表B也同样对于表A的多个元素时,就把2个表的key拿出来做个新的表。
这里可以这么做:
弄个新的表将课程对应提取出来单独储存,带有教师的ID和课程的ID,之后还可以加入一些时间,描述之类的项。 这样就连接了教师表和课程表 而不用对这2个表有任何的修改
[解决办法]
老师表:
老师ID 老师姓名 职称 职务...

其中老师ID是主键(Primary Key)

课程表:
课程ID 老师ID 课程名称...

其中课程ID是主键,老师ID是外键(Foreign Key,需要参考老师表.老师ID)



数据表结构设计,绝大部分情况下是有冗余的,没有冗余的情况不太容易做到,即使做到了,那么开发的人肯定会死去活来的。因为这样的原因,在实践中很少用到超过3NF的范式。

数据库范式,看起来好像很简单,其实要理解清楚还是有点难度滴,哥曾经写过一篇文章,试图用简单、实际的例子来说明1NF,2NF和3NF。详见:
数据库范式问题
[解决办法]
不会,因为建索引了。
索引你可以理解为array的下标。取a[0001][]这样的操作是很快的。

热点排行