用面向对象思想设计数据库

对于开发者来说 由于数据结构的变化导致程序的修改无疑是让人头疼的 。尤其是那些频繁的修改 今天加一个字段 明天又加一个字段, 大量的时间都浪费在修改这些无关紧要的工作上了。

好了,言归正传 先看下面一个小例子

[code]
//商品类
public class Product{
private long productId;
private String category;
private String productCode;
private String productName;
}

//推荐商品类 ,如推荐到首页
public class RecommendProduct{
private String recommend_username;
private String recommend_date;
private Product product;
}
[/code]
一般我们的设计就是这样
通过查询返回一个List<RecommendProduct>到首页, 操作完成

如果想下面这样设计就不太合理,而且也打破了类设计的原则----功能单一性
[code]
//商品类
public class Product{
private long productId;
private String category;
private String productCode;
private String productName;

//新添加字段
private String recommend_flag;//是否被推荐
private String recommend_username;
private String recommend_date;
}
[/code]

好了 现在把这个设计照搬到数据的设计上
如果将product和recommendProduct设计在一张表中如下
Product表
product_id number(12)
category varchar2(16)
productCode varchar2(16)
productName varchar2(32)
recommend_flag char(1) //推荐标志位
一开始可能是这样
如果我要推荐到10个二级域名的首页怎么办?要加10个标志字段吗?显然这样做不行

采用面向对象的思想设计如下
Product表(只包含产品相关信息的字段)
product_id number(12)
category varchar2(16)
productCode varchar2(16)
productName varchar2(32)

RecommendProduct表(作为单独表 而不是一个标志为)
recommend_id (PK)
product_id (Fk)
recommend_username
recommend_date

这样做的另外一个好处是:两个表的变化是独立的 可以在RecommendProduct表中添加字段而不会影响到product表 如果设计在一起的话就会出现开头说的问题 今天加一个字段明天加一个字段情况

借鉴了一些面向对象设计的开闭原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值