主键
不过这个数据表严格说起来还有瑕疵,那就是使用者一但增加,一定会有重复的使用者账号。如果使用者账号有重复的话,使用在者登入的时候就无法确认到底是哪个使用者。所以我们必须将使用者账号设定成不允许重复,只要将这个字段设定成主键(Primary Key)就可以了:
外来键
字段设定成主键最主要的功能除了不允许重复外,另外还可以建立两个数据表之间的关联。将数据库的结构作一个合理的分析,适当的将数据分散到各个数据表以及建立数据表之间的关联,这个动作叫做数据库的正规化。关系型数据库有什么好处呢?我们来举一个实际的例子,假设我们的网站除了使用者的数据外,还要记载使用者的订单状况。这样一来数据表就会多了订单日期、产品名称、单价、订购数量以及小计等项目,如果这些数据都和使用者基本数据记录在一起,我们的数据表就会变成(因为会重复的输入使用者的基本数据,所以我们将使用者数据表主键的设定关掉):
我们在上列数据表中新增了三笔资料。但是除了使用者的订单数据外,我们发现使用者的基本数据重复输入了。数据重复输入有许多坏处,第一是增加数据库的储存空间,第二是可能会导致数据输入错误,第三是不容易维护及管理。假设使用者的电子邮件信箱改变了,在这种数据库里面需要将使用者所有纪录的电子邮件信箱字段全部作更新,不但浪费数据库空间而且不好管理;所我们应该把这些重复出现的数据独立出来,再建一个订单数据表。我们在数据库对话盒中选择新建,如下图所示:
然后输入数据表架构,输入完毕后将数据表命名为Orders,如下所示:
由于订单数据表中要纪录订单是哪个使用者所下的,所以我们在这里产生了和Members 数据表中定义一样的UserId 字段,这个字段表示是要参考Members 数据表中的UserId 字段,所以一个字段若要参考其它字段的主键,则这个字段就叫做外来键(Foreign Key),这个字段我们在下个建立数据表的关联时会用到。数据表结构在存盘的时候依然发出没有主键的警告,在这里我们不需要建立主键,所以选择「否」存档后离开。接下来我们要设定这两个数据库之间的关联了。在设定关联之前请先确定Members 数据表是否有设定主键UserId,倘若没有请设先定完毕后再选择「数据库关联图」选项:
出现「显示资料表」对话盒后,我们将Members 以及Orders 分别点选新增:
新增完毕后这两个数据表就被加到「数据关联图」窗口中了,如下图所示:
