CREATE TABLE `film` ( `film_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `description` TEXT, `release_year` YEAR(4) DEFAULT NULL, `language_id` TINYINT(3) UNSIGNED NOT NULL, `original_language_id` TINYINT(3) UNSIGNED DEFAULT NULL, `rental_duration` TINYINT(3) UNSIGNED NOT NULL DEFAULT'3', `rental_rate` DECIMAL(4,2) NOT NULL DEFAULT'4.99', `length` SMALLINT(5) UNSIGNED DEFAULT NULL, `replacement_cost` DECIMAL(5,2) NOT NULL DEFAULT '19.99', `rating` VARCHAR(5) DEFAULT'G', `special_features` VARCHAR (10) DEFAULT NULL, `last_update` TIMESTAMP, PRIMARY KEY(`film_id`))
CREATE TABLE file_text ( `film_id` SMALLINT (5) UNSIGNED NOT NULL, `title` VARCHAR(255) NOT NULL, `description` TEXT primary key(film_id) ) engine = innodb
所谓的垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题。通常垂直拆分可以按以下原则进行:
把不常用的字段单独存放到一个表中。
把大字段独立存放到一个表中。
把经常一起使用的字段放到一起。
垂直拆分三原则(分别三种情况):
不常用
大字段
经常用
例子中,拆分后两个表都有一个film_id,这就是垂直拆分后两个表的关联所在。
表垂直拆分 1.不经常用得放在同一个表中 2.经常用得放在同一个表中 3.大的字段单独放在一个表中
数据库的优化
1.选择合适的数据类型
2.反第三范式优化
3.表的垂直拆分
4.表的水平拆分
表垂直拆分:就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题。垂直拆分原则:
1.不经常用得放在同一个表中
2.经常用得放在同一个表中
3.大的字段单独放在一个表中
表的垂直拆分
表的垂直拆分