hibernate数据库的设计

[color=red]如何设计数据库表?[/color]
1.
发现领域中的概念,理清领域中的概念,将其映射成表‘
2.
尽量遵循数据库设计范式:
1.
第一范式:有主键,具有原子性,列不可分割;
2.
第二范式:完全依赖,没有部分依赖;
3.
第三范式:没有传递依赖;
3.
主键尽量采用单一主键,避免符合主键,尽量使用没有业务予以的字段作为主键(如, oracle 的 Sequence 来维护一个主键),主键一般建

议使用数值型,会提高检索的效率;
4.
冗余的字段,应该根据需要的具体情况是否加入;
[color=red]5.
最好加入外键约束
使用Hibernate作为ORM,设计数据库的时候,一般说的是不要选取自然主键(有业务含义的主键)
按常理来论,关联都应该是双向的,确实如此,hibernate 建议用双向关联,在建立表的时候设置表间的联系(通过forigen key关联),在数据设计中表之间多对多的关系,需要新建一个表,存储双方的主键,在hibernate方向工程中就可以自动建立双向关联了。双向关联中联系多对多的关系。
记住在hibernate 实体中存放的是表实体,而不是关系实体。[/color]
6.
如果做通用性产品,最好不是使用数据库特性的功能;
7.
如果数据量非常庞大,并且频繁使用相关字段的查询,最好建立索引;


示例
表 product和brand
一个brand对应多个product
在product中游brand的外键 brand_id
hibernate逆向工程后生成hbx

    <class name="com.Product" table="product" catalog="shopxx">
<id name="id" type="java.lang.String">
<column name="id" length="32" />
<generator class="increment" />
</id>
<many-to-one name="brand" class="com.Brand" fetch="select">
<column name="brand_id" length="32" />
</many-to-one>
<property name="createDate" type="java.util.Date">
<column name="createDate" length="19" />
</property>


brand 映射
<class name="com.Brand" table="brand" catalog="shopxx">
<id name="id" type="java.lang.String">
<column name="id" length="32" />
<generator class="increment" />
</id>
<property name="createDate" type="java.util.Date">
<column name="createDate" length="19" />
</property>
<property name="modifyDate" type="java.util.Date">
<column name="modifyDate" length="19" />
</property>
<property name="introduction" type="java.lang.String">
<column name="introduction" length="65535" />
</property>
<set name="products" inverse="true">
<key>
<column name="brand_id" length="32" />
</key>
<one-to-many class="com.Product" />
</set>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值