`
xuyuanshuaaa
  • 浏览: 387775 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

hibernate数据库的设计

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

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

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>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics