AT=DEFAULT
AUTO_INCREMENT=1
本版控制表,用于记录每次变动
CREATE TABLE `article_history` (
`id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
`article_id` MEDIUMINT(8) UNSIGNED NOT NULL,
`cat_id` SMALLINT(5) NOT NULL DEFAULT '0',
`title` VARCHAR(150) NOT NULL DEFAULT '',
`content` LONGTEXT NOT NULL,
`author` VARCHAR(30) NOT NULL DEFAULT '',
`keywords` VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
INDEX `article_id` (`article_id`)
)
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=1
版本控制触发器
DROP TRIGGER article_history;
DELIMITER //
CREATE TRIGGER article_history BEFORE update ON article FOR EACH ROW
BEGIN
INSERT INTO article_history SELECT * FROM article WHERE article_id = OLD.article_id;
END; //
DELIMITER;
我的建表规则很多是基于Form建模(但不是全部都按form走,这样说让各位好理解),例如用户登录表单:
user
password
submit
当做用户认证的时候只需要读user即可。此时profile空闲
当点击编辑个人信息的时候才读取profile表。
用户user表只有user,passwd等几个字段,性能远比一个大user表好。
像MySQL这样的数据库,有些操作会锁表,将user 分为两个1:1的表可以避开一部分锁表影响
现在我们来设计个order(订单系统表),会用到上面的product与user表。
order 表
id
user_id
sn 订单编号
...
created 创建时间
order_item表
id
order_id
product_id
....
当点击我的订单时查询order表,当点击定点细节时读order_item表。以此类推,不多举例。
延伸阅读
http://netkiller.sourceforge.net
http://netkiller.github.com