首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》30.3 建立数据库

关灯直达底部

对于这个应用程序,需要保存如下所示的细节信息。

■Lists(列表):可供订阅的邮件列表。

■Subscribers(订阅者):系统用户和他们的个人喜好信息。

■Sublists(订阅列表):记录哪些用户订阅了哪些邮件列表(多对多的关系)。

■Mail(邮件):已经发送的邮件消息的记录。

■Images(图像):由于我们想要发送由多个文件组成的邮件消息,必须跟踪每个邮件附带的文本、HTML和图像。

用来创建该数据库的SQL如程序清单30-1所示。

程序清单30-1 create_database.sql——创建mlm数据库的SQL

create database mlm;

use mlm;

create table lists

(

listid int auto_increment not null primary key,

listname char(20)not null,

blurb varchar(255)

);

create table subscribers

(

email char(100)not null primary key,

realname char(100)not null,

mimetype char(1)not null,

password char(40)not null,

admin tinyint not null

);

#stores a relationship between a subscriber and a list

create table sub_lists

(

email char(100)not null,

listid int not null

);

create table mail

(

mailid int auto_increment not null primary key,

email char(100)not null,

subject char(100)not null,

listid int not null,

status char(10)not null,

sent datetime,

modified timestamp

);

#stores the images that go with a particular mail

create table images

(

mailid int not null,

path char(100)not null,

mimetype char(100)not null

);

grant select,insert,update,delete

on mlm.*

to [email protected] identified by'password';

insert into subscribers values

('[email protected]','Administrative User','H',sha1('admin'),1);

注意可以通过输入如下命令来执行这个SQL脚本:

mysql-u root-p<create_database.sql

必须提供root用户密码(当然,也可以通过任何具有适当权限的MySQL用户来执行该脚本;这里,我们为了简便仅使用root用户)。在运行这个脚本之前,应该修改该脚本中的mlm用户和管理员的密码。

该数据库的某些字段需要稍作解释,我们简单地看一下。lists表包括listid字段和listname字段。它还包括一个blurb字段,它描述了该列表的主要内容。

subscribers表包括电子邮件地址(E-mail)字段和订阅者的名字(realname)字段。该表还保存了用户密码和一个用来表明该用户是否是管理员的标记(admin)字段。我们还要在mimetype字段中存储用户想要接收的邮件类型。这里,可以用H代表HTML或T代表文本。

sublists表包括关于来自subscribers表的邮件地址(E-mail)和来自lists表的listids。

mail表包括关于通过系统发送的每条邮件消息的信息。它保存了唯一标识(mailid)、邮件从何处发送而来的地址(E-mail)、邮件的主题行(subject)和已经发送的或将要被发送的列表listid。消息的实际文本或HTML版本可能是一个大文件,因此我们在数据库之外存储实际消息的存档文件。我们还保存一些常规状态信息:消息是否已经被发送了(status),什么时候发送的(sent),以及显示该记录最后一次修改的时间戳(modified)。

最后,我们用images表来记录任何与HTML消息有关的图像。同样,这些图像可能非常大,因此出于效率的考虑,我们将它们保存在数据库之外。我们需要记录与之相关联的mailid、图像实际存储位置的路径和图像的MIME类型(mimetype),例如image/gif。

前面所示的SQL脚本还将为PHP创建一个用户,通过这个用户,PHP可以连接数据库,同时,该用户还是系统的管理用户。