10分钟掌握数据库建模(三)

2014-11-24 07:14:03 · 作者: · 浏览: 73
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