注册 登录
编程论坛 Delphi论坛

挑战Delphi数据库

weijing_007 发布于 2008-06-13 12:24, 1925 次点击
本人要开发一个简单的“图书管理系统”的项目,SQL数据库如下 :
create database 图书管理系统
use 图书管理系统

create table 图书表(
图书编号 char(10) not null primary key,
书名 char(10)not null,
图书类别 char(8) not null,
本图书数目 int not null,
图书价格 money ,
)
create table 学生(
学生编号 char(10) not null primary key,
姓名 char(10) not null,
班级 char(15) not null,
)

create table 借阅表(
学生编号 char(10) not null primary key,
图书编号 char(10) not null,
借出天数 int ,
借出时间 datetime,
姓名     char(10) not null,
)
想在借阅表理插入数据,代码如下,请问如下代码错在哪里,望指教:
doquery3.Close;
       adoquery3.SQL.Clear;
       adoquery3.SQL.Add('insert into 借阅表 values(
                          'select 学生编号 from 学生表 where 学生编号='+''''+Edit2.Text+'''' ,
                          'select 姓名     from 学生表 where 学生编号='+''''+Edit2.Text+'''',
                          'select 图书编号 from 图书表 where 图书编号='+''''+Edit1.Text+'''',
                          'select 书名     from 图书表 where 图书编号='+''''+Edit1.Text+'''',
                          'select getdate()',1)
                          ');
       adoquery3.Open;
在Delphi界面里面的两个Edit框中输入学生编号和图书编号,如何把这两个编号更新至数据库
5 回复
#2
makebest2008-06-14 19:20
借阅表的五个字段与insert的values不对应啊,另外用子查询取数据要在子查询加括号,是否支持在values部分使用子查询也不太确定。
#3
provoke2008-06-14 20:06
'select 学生编号 from 学生表 where 学生编号='+''''+Edit2.Text+''''

这句不是废的吗!直接用''''+Edit2.Text+'''' 就是了……

同样下面这句也是废的:

'select 图书编号 from 图书表 where 图书编号='+''''+Edit1.Text+''''

直接用''''+Edit1.Text+''''就是了。

还有:

    1、借阅表里不需要记录学生姓名这一字段,因为学生编号是学生表里的主键,通过这个编号可以唯一确定学生的名字;

    2、图书名也是不必记录到借阅表里,原因同上。

    学生和图书之间是“借阅”关系,这个关系是多对多的;多对多关系的应该由各实体的主码组成复合主码,而多对多关系中除了主码,只保存属于该关系特有的属性。

    也就是:借阅表的主码应该包括学生编号,图书编号;书名和学生姓名均不属性“借阅”这一关系的,因此不能作为借阅的属性。

    同一个学生能够借阅多本书;同一本书在不同时间可以由不同的学生借阅;同一学生也可以在不同的时间借阅同一本书。所以,借阅表的主码不能只包含图书编号号和学生编号,还应包括另一个属性,例如可以是借阅时间,或者新增一个借阅记录编号,等等。

    照你现在的表结构,每个人只能借阅一次,很明显不合理。

    关系数据库是要实现最小冗余的,看来你并未真正领会到这一点。

    数据库原理没学好就做系统,你会越做越辛苦的,而且系统功能越多越强大,你就会越痛苦。
#4
weijing_0072008-06-14 23:17
谢谢你的点评
关于前面的两个废的 已经在做时候已经 想到了

我们是要做一个小的模拟图书管理系统 数据冗余和性能就不做考虑了
我们没做开发 现在是几个同学在一起 模拟团队开发
在数据库原理上我们确实有不足的
我们就是要在团队的合作开发中去寻找自己的不足的
#5
lisatisfy2008-07-26 00:11
虽说是模拟的.但数据冗余和性能最好能考虑下...对以后帮助多多.
我在做系统时就有考虑这东东了(也是模拟)
1