第四章 表设计
随着表中数据越来越对,无形中对于表中数据的操作带来了压力。这个时候,如果能有一个好的表的结构,这种压力会小很多。
一.两张表
这两张表分别记录了鱼的相关信息:
fish_info
fish_records
相对于鱼的信息来讲,这两张表记录的内容基本是一直的,但是,明显第二张表的列数会比第一章多,在查询“在‘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);
本文出自 “墨痕” 博客,转载请与作者联系!