This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(04)

时间:2007-12-23  来源:不详  作者:迈克DB

数据库的列表在不同的服务器上是不同的,但是至少可以看到samp_db 和m y s q l;后一个数据库存放控制MySQL 访问权限的授权表。DESCRIBE 与SHOW 查询具有可从外壳程序中使用的命令行等同物,如下:
% mysqlshow 与SHOW DATABASES 一样列出所有数据库
% mysqlshow d b _ n a m e 与SHOW TABLES 一样列出给定数据库的表
% mysqlshow db_name tbl_name 与DESCRIBE tbl_name 一样,列出给定表中的列
2. 用于学分保存方案的表
为了知道学分保存方案需要什么表,我们来看看在原来学分簿上是怎样记学分的。图1 - 2示出学分簿的一页。该页的主体是一个记录学分矩阵。还有一些对学分有意义的必要信息。学生名和ID 号列在矩阵的一端。(为了简单好看,只列出了四个学生。)在矩阵顶端,记录了进行测验和测试的日期。图中示出9月3号、6号、1 6号和2 3号进行测验, 9月9号和1 0月1号进
行测试。
为了利用数据库来记录这些信息,需要一个学分表。这个表中应该包含什么记录呢?很明显,每一行都需要有学生名、测验或测试的日期以及学分。图1-3 示出了用这样的表表示的一些来自学分簿的学分。(日期以MySQL 的表示格式“Y Y Y Y- M M - D D”表示。)

织梦好,好织梦


但是,以这种方式设置表似乎有点问题。似乎少了点什么。请看图1 - 3中的记录,我们分辨不出是测验的学分还是测试的学分。假如测验和测试的学分权重不同,在确定最终的学分等级时知道学分的类型是很重要的。或许可以试着从学分的取值范围来确定学分的类型(测验的学分一般比测试的学分少),但是这样做很不方便,因为这需要进行判定,而且在数据中也不明显。可以通过记录学分的类型来进行区分,如对学分表增加一列,此列包含“ T”或“Q”以表示是“测试”或是“测验”,如图1-4 所示。这具有使学分数据类型清析易辨的优点。不利的地方是这个信息有点冗余。显然对具有同一给定日期的记录,学分的类型列总是取相同的值。9月2 3日的学分总是为“ Q”类型,而1 0月1日的学分其类型总是具有“ T”类型。这样令人很不满足。假如我们以这种方式记录一组测验或测试的学分,不仅要为每个新记录输入相同的日期,而且还要一再重复地输入相同的学分类型。谁会希望一再输入冗余的信息呢?

我们可以试试另外一种表示。不在score 表中记录学分类型,而是从日期上区分它们。我们可以做一个日期列表,用它来记录每个日期发生的“学分事件”(测验或测试)。然后可以将学分与这个事件列表中的信息结合,确定学分是测验学分还是测试学分。这只要将score 表记录中的日期与event 表中的日期相匹配得出事件类型即可。图1 - 5示出这个表的设计并演示了score 表记录与9月2 3日这个日期相关联的工作。通过将score 表中的记录与event 表中记录相对应,我们知道这个学分来自测验。 织梦内容管理系统

这比根据某些猜测来推断学分类型要好得多;我们可以根据明确记录在数据库中的数据来直接得到学分类型。这也比在score 表中记录学分类型更好,因为我们只需对每个类型记录一次。
但是,在第一次听到这种事情时(即结合使用多个表中的信息),可能会想,“嗯,这是一个好主意,但是不是要做很多工作呢?会不会使工作更复杂了?”在某种程度上,这种想法是对的。处理两个记录表比处理一个要复杂。但是再来考察一下学分簿(见图1 - 2)。不是也记录了两套东西吗?考虑下列事实:
■ 在学分矩阵中用两个单元记录学分,其中每个单元都是按学生名字和日期(在矩阵的旁边和顶上)进行索引的。这代表了一组记录;与score 表的作用相同。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息