挑战Delphi数据库
本人要开发一个简单的“图书管理系统”的项目,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框中输入学生编号和图书编号,如何把这两个编号更新至数据库 借阅表的五个字段与insert的values不对应啊,另外用子查询取数据要在子查询加括号,是否支持在values部分使用子查询也不太确定。 'select 学生编号 from 学生表 where 学生编号='+''''+Edit2.Text+''''
这句不是废的吗!直接用''''+Edit2.Text+'''' 就是了……
同样下面这句也是废的:
'select 图书编号 from 图书表 where 图书编号='+''''+Edit1.Text+''''
直接用''''+Edit1.Text+''''就是了。
还有:
1、借阅表里不需要记录学生姓名这一字段,因为学生编号是学生表里的主键,通过这个编号可以唯一确定学生的名字;
2、图书名也是不必记录到借阅表里,原因同上。
学生和图书之间是“借阅”关系,这个关系是多对多的;多对多关系的应该由各实体的主码组成复合主码,而多对多关系中除了主码,只保存属于该关系特有的属性。
也就是:借阅表的主码应该包括学生编号,图书编号;书名和学生姓名均不属性“借阅”这一关系的,因此不能作为借阅的属性。
同一个学生能够借阅多本书;同一本书在不同时间可以由不同的学生借阅;同一学生也可以在不同的时间借阅同一本书。所以,借阅表的主码不能只包含图书编号号和学生编号,还应包括另一个属性,例如可以是借阅时间,或者新增一个借阅记录编号,等等。
照你现在的表结构,每个人只能借阅一次,很明显不合理。
关系数据库是要实现最小冗余的,看来你并未真正领会到这一点。
数据库原理没学好就做系统,你会越做越辛苦的,而且系统功能越多越强大,你就会越痛苦。 谢谢你的点评
关于前面的两个废的 已经在做时候已经 想到了
我们是要做一个小的模拟图书管理系统 数据冗余和性能就不做考虑了
我们没做开发 现在是几个同学在一起 模拟团队开发
在数据库原理上我们确实有不足的
我们就是要在团队的合作开发中去寻找自己的不足的 虽说是模拟的.但数据冗余和性能最好能考虑下...对以后帮助多多.
我在做系统时就有考虑这东东了(也是模拟)
页:
[1]
