第四章  表设计

          随着表中数据越来越对,无形中对于表中数据的操作带来了压力。这个时候,如果能有一个好的表的结构,这种压力会小很多。

一.两张表

这两张表分别记录了鱼的相关信息:

fish_info

Description: C:\Users\4215hc\Desktop\New folder\1.png

fish_records

Description: C:\Users\4215hc\Desktop\New folder\2.png

相对于鱼的信息来讲,这两张表记录的内容基本是一直的,但是,明显第二张表的列数会比第一章多,在查询“在‘NJ’出产的鱼”的时候,使用的查询条件也不同。

fish_info:SELECT  * FROM fish_info WHERE location LIKE ‘%nj’;

fish_records:SELECT * FROM fish_records WHERE state = ‘nj’;

          查询结果的差异,并不一定意味着表设计的好坏,只要得出的结果能够满足需求就可以了,也就是使用数据的方式。所以,一个好的表设计,一定要结合使用数据的方式。

二.表都是关于关系的

        对于设计表的人而言,如果要设计一个杀手级的表,我们就必须考虑列彼此之间如何产生关系,如何一起描述某项事物。挑战之处在于使用列描述事物,并且让取得数据更为方便。可遵循的步骤:

a.       挑出事物,挑出你希望表描述的某样事物。

b.      列出一份关于事物的信息列表,这些信息都是使用表时的必要信息。

c.       使用信息列表,把事物的综合信息拆分成小块信息,便于组织表。

三.原子性

          原子(atom,代表小到无法分割。

          当数据具有原子性(atomic,表示它已经被分割到最小快,不能或不应该再被分割了。

          比如地址(address),对送货员来讲,就是一窜字符串:******号,但是对于房地产开发商来说,就要将这一串分开了,市,街分别做列了。

         具有原子性的列数据,可以让查询即简单,又直接。

根据原子性,设计表的规则:

a.       具有原子性数据的列中不会有多个类型相同的值。

b.      具有原子性数据的表中不会有多个存储同类数据的列。

规范化表的优点:

a.       规范化表中没有重复的数据,可以减少数据库的大小。

b.      因为查找的数据较少,查询会更为快速。

第一范式:1NF

a. 每个数据航必须包含具有原子性的值。

b. 每个数据行必须有独一无二的识别项(主键)。

主键规则:

a.       主键不可以为NULL

b.      插入新纪录时,必须指点主键

c.       主键必须简洁

d.      主键不可以被修改

小插曲:查看表的创建语句:SHOW CREATE TABLE fish_info;

 

创建带有主键的表:

CREATE TABLE `my_contacts` (

  `contact_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

 `last_name` varchar(30) ,

 `first_name` varchar(20) ,

 `email` varchar(50) ,

 `gender` char(1),

 `birthday` date ,

 `profession` varchar(50),

 `location` varchar(50), 

 `status` varchar(20),

 `interests` varchar(100),

 `seeking` varchar(100)

);

我们也可以在原有表的基础上,曾加主键

ALTER TABLE my_contacts

ADD COLUMN contact_id INT NOT NULL AUTO_INCREMENT FIRST ,

ADD PRIMARY KEY (contact_id);