借阅数据库系统设计(.图书借阅系统数据库设计之二)
借阅数据库系统设计(.图书借阅系统数据库设计之二)图2中第1行关键字CREATE TABLE是一个创建表的命令,后面紧接着的是待创建的表的名称,本例为publisher,在圆括号内定义的内容为表的各个字段。第2行代码表示定义一个名称为id的字段,数据类型为INTEGER整型,并且这个字段值通过关键字UNIQUE设置了它的唯一性,即在表publisher中所有记录不能含有重复的id值。第3行代码表示创建一个名称为name的字段,这个字段的类型为文本类型,它的约束条件为非空,表示名称字段必须有文本内容。第4行表示创建的字段名称为address,类型也是文本型。第5行代码不是创建字段,而是设置这个表的主键字段名为id字段,即第一行代码所定义的字段,并指定了这个字段值具有自动递增功能,也就是说,在向这个表插入一条数据的时候,这个id值可以不用设置,它会自动生成一个数值,本项目中的其它id字段也使用了同样的设置。图2构建数据表时,我们选择没有依赖其
本文为《图书借阅系统数据库设计》的第二篇文章,其它的内容可以查看之前或之后的文章,您的反馈是对我最大的鼓舞,谢谢大家!
图书借阅系统数据库设计之一
项目介绍在上一篇文章《图书借阅系统数据库设计之一》中,我们已经设计出了整个数据库系统的ER图,接下来的工作是将其转换为具体的数据库管理系统(DBMS)中可操作的对象。本项目采用了应用广泛的SQLite 数据库,它是一个无需配置即可使用的一个强大的关系型数据库,对于桌面端应用或手机端应用来说已经足够。我们使用上文中完成的ER图采用SQLite软件构建出这个图书借阅数据库,图1为上一篇文章构建完成的ER图,本文我们基于此ER图进行构建SQLite数据库。
图1
构建数据表创建出版社表构建数据表时,我们选择没有依赖其它表的数据表进行创建操作,比如图1中出版社数据表不依赖于其它表,我们首先创建这个数据表。出版社表所使用的字段名与ER图中的属性名称对应关系如下表1所示。
表1
使用图2中的创建数据表SQL语句进行构建一个SQLite数据库表,将这个表的名称命名为publisher。
图2
图2中第1行关键字CREATE TABLE是一个创建表的命令,后面紧接着的是待创建的表的名称,本例为publisher,在圆括号内定义的内容为表的各个字段。第2行代码表示定义一个名称为id的字段,数据类型为INTEGER整型,并且这个字段值通过关键字UNIQUE设置了它的唯一性,即在表publisher中所有记录不能含有重复的id值。第3行代码表示创建一个名称为name的字段,这个字段的类型为文本类型,它的约束条件为非空,表示名称字段必须有文本内容。第4行表示创建的字段名称为address,类型也是文本型。第5行代码不是创建字段,而是设置这个表的主键字段名为id字段,即第一行代码所定义的字段,并指定了这个字段值具有自动递增功能,也就是说,在向这个表插入一条数据的时候,这个id值可以不用设置,它会自动生成一个数值,本项目中的其它id字段也使用了同样的设置。
创建读者表表2定义了ER图中读者属性与数据表字段的对应关系,如下所示。
表2
创建表的命令与上述创建出版社表的命令相同,只是这个表的名字为”borrower”,如图2第8行代码所示,第9-14行代码设置这个表中各个字段的属性。第9行和14行代码设置id字段为一个递增式主键字段,其类型为INTEGER整型,第10行定义了一个类型为文本型的字段,名称为name,其值不能为空值;第11行代码定义了一个类型为文本的字段,这个字段没有其它约束,与上一个字段name相比,它的值是可以为空值的;接下来第12行代码设置字段telephone的类型为文本型,其值也不为空值,因为我们希望读者提供的信息中能够有一个有效联系方式,其中email、telephone和address都为读者的一种联系方式,在设计时,我们人为地选择了电话telephone字段为必须的数值,其它的两个字段值为可选值。这就是为什么第11行代码和第13行代码没有设定NOT NULL约束的原因。
图3
创建图书管理员表表3显示了ER图中的属性与数据表中字段的对应关系,表3中的性别信息实际类型为布尔值,我们通过0值表示男性,通过1值表示女性。最后的三个类型为日期类型,格式如“2000-04-13”所示。
表3
创建图书管理员的命令如下图3所示,创建表的命令已经在前面两小节时做了详细介绍,之后我们将只介绍内容有所不同的字段,字段相同或相似的约束如本例中id、name与之前表中定义的字段类型和约束条件都做过说明,故不再赘述。图3中第32行代码表示性别的字段gender使用了INTEGER整型,通过数字值0表示男性、1表示女性。字段date_of_employed、date_of_birth和date_of_resign表示日期类型,如果使用过其它关系型数据库比如MySQL或PostgreSQL软件,就会产生疑问:日期数据对应的类型不应该为Date类型吗?但是SQLite是一个动态类型数据库,其存储类只有整数、浮点、文本、BLOB和NULL5种,并没有存储类为Date的类型,它是通过使用内置的函数来处理日期和时间数据的,用户可以将日期输入为”YYYY-MM-DD”格式的字符串进行存储,如本例中以上3个日期字段值。
图4
创建书籍表ER图属性与数据表字段的对应关系如表4所示,这个表给出了一个外键为出版社id值,通过此值可以获取到出版社名称和地址相关信息。
表4
图4给出了创建书籍表的SQL语句,表中大部分字段使用的存储类型、约束条件在前文中已经做过介绍,只有第46行代码未曾介绍过其功能含义是什么,它表示在这张表中的第41行代码定义的字段publisher_id为一个外键,其对应的主键为表publisher中的id字段,也就是说,book表和publisher通过外键publisher_id建立了多对一的关系。
图5
创建借阅表借阅表ER属性与数据表字段值的对应关系如表5所示
表5
图5为创建借阅表的SQL语句,在这条语句中,使用了3个外键,分别为读者id(borrower_id),图书管理员id(administrator_id)和书籍id(book_id)字段,三个字段分别通过第53-55行代码设置为外键字段。此外三个日期时间字段date_of_issued、date_due_for_return和date_returned使用了表示日期和时间的数据,格式为”YYYY-MM-DD HH:MM:SS“,同样其存储类型依然是文本类型,在进行数据操作时,使用SQLite对应的内置日期时间函数。
图6
这个数据库中的5张表的创建方法及其每一个字段都做了详细的描述,对表中字段的约束可以做更进一步的限制,比如其缺省值、取值范围等条件,我们暂时先不考虑这些约束,首先完成一个可以使用的数据库,之后按照需求或优化要求做进一步完善。下一步将实现书籍的插入和查询操作,谢谢阅读。
图书借阅系统数据库设计之一