`

过去的一个关于数据库设计的讨论,觉得有些价值,自己收藏起来

阅读更多
过去的一个关于数据库设计的讨论,觉得有些价值,自己收藏起来。

antonyup_2006 写道
hehe 我们现在的项目也是反向生成表结构 做电子商务方面的
怎么说呢 两种方法都接触过  对于一些前期已经把表结构都设计好了的(有dba参与)的 可能用先设计数据库 然后在根据数据库来建模会比较好 特别是比较大的项目 对于数据库的设计在项目设计中会靠前做好 ,而对于项目开始的时候,库没设计好 而开发人员已经开始设计了 annotation的方式也不错 在设计的时候建立bean的时候把关系建好 反向生成数据结构 但这里有个问题 不知道各位是怎么解决的 就是我们现在出现个情况就是在开发的过程中 每个模块的开发人员都自己设计相关的模块表结构 当涉及到交叉公用的表时候会出现冗余  这样对于整个系统的数据设计好象有点不够严谨.出现着情况的一个重要原因就是需求变化比较大 并且是策划驱动的(自己公司的) 而不是客户需求驱动的.


反向生成表结构,仍然是正向建模吧?需求变化比较大的情况下,原有的表不可能满足的,要么能通过增加表和字段解决,要么部分进行重构。表结构进行重构的过程中,如果系统已经上线,还要保留原来数据,数据需要重新组织。不知道你们的项目有没有遇到这种情况。

PowerDesigner数据库建模和修改模型。根据建模文件生成Hibernate Mapping和PO,只有一对一,多对一,一对多三种关系,多对多用一对多和多对一表示,生成DAO层包含CRUD方法和查询方法,查询基于DetachedCriteria构建(直接使用DetachedCriteria并不方便,需要辅助对象对其生成),摒弃Hql方式(不利于重构),因为一对多等关系已经在建模的时候很完善,所以无需Hql进行join查询,对于A一对多B,B一对多C,C一对多D这种情况,根据实际的查询情况增加A一对多C或B一对多D这样的冗余关联关系,节省计算量。

统计是个复杂的问题,总结了两大类,时间和空间型统计,如每个月的数据进行统计属于时间型,如A一对多B,统计属于某个A的多个B某些字段属于空间型。对于时间型,先设基本统计单位,如每日统计数据,在此基础上统计每周,每月,在月的基础上统计每年,逐级进行。一般时间型统计涉及数据表很广,涉及记录数多,一般系统初始化的时候预先统计一次放到内存,当数据库增加新记录的时候触发累加,只要累加的方法是线程安全的就行,需要统计的时候直接访问内存对象,速度很快,不用访问数据库。对于空间型的,如果涉及的数据量不多,直接使用Hibernate的Projection来做,如果数据量过多,则使用内存对象放中间结果。

数据模型的局部修正,通过工具很快就能对生成的JAVA代码进行重构,因为编译器会检查编译错误,只要修正错误即可。由于没有使用Hql,加上单元测试工具,不会因为重构产生很多陷阱。

比较麻烦的是旧有数据的兼容性。至今没有很好的解决办法,通常都是在数据库中建多一个备用的schema,把旧模型的数据转换之后拷贝过来(必须先停掉目标数据的constrains,否则会出错的),数据量很大的话会很麻烦。还有一个办法是把定期把旧数据移动到数据仓库,模型变动后不更改数据仓库旧数据的结构,把模型变动后的数据归档的时候将放到新的数据仓库当中。遗留数据的处理向来都是个麻烦的问题啊。
分享到:
评论

相关推荐

    自己动手设计数据库

    《自己动手设计数据库》这本书是数据库设计领域的一本经典之作,尤其适合初学者和非专业技术人员阅读。书中详细讲解了如何进行关系型数据库的设计,帮助读者理解数据库的基础知识,掌握数据库设计的基本步骤和方法。...

    自己动手设计数据库.[美]Michael J.Hernandez(带详细书签) PDF 下载 高清 完整版

    《自己动手设计数据库》主要讲述数据库的设计,讨论了如何建立表结构、确定主键、设置字段说明、建立表关系、确立业务规则、建立视图和各层次的数据完整性,以及如何避免不好的设计等问题。《自己动手设计数据库》...

    4-软件数据库设计文档模板.docx

    软件数据库设计是一个复杂的过程,涉及到数据库逻辑设计、物理设计、分布式数据库设计等多个方面。为了确保软件系统的数据库设计是正确的和高效的,需要进行细致的设计和规划。本文档旨在提供一个软件数据库设计文档...

    软件开发过程中数据库设计部分详解

    数据库设计的任务是根据一个组织的信息需求、处理需求和数据库支撑环境,设计出数据库模式 —— 包括概念模式、逻辑模式和物理模式。 数据库设计的结果不是唯一的,不同的设计者可能得出不同的数据库模式。评判...

    关于用户权限的数据库设计

    "关于用户权限的数据库设计" 本文讨论了数据库设计中用户权限的设计问题,特别是基于基本权限功能的设计。文章首先介绍了项目中权限控制的需求,接着讨论了 zwei 疑惑:一是是否应该在底层截取用户权限,控制用户对...

    PML数据库设计讨论1

    数据库设计是一种复杂的系统设计过程,涉及到数据模型、数据结构、数据存储和数据管理等多个方面。以下是PML数据库设计讨论的主要知识点: 一、数据库设计原则 数据库设计的主要原则包括数据 normalization、数据...

    数据库课程设计:长途汽车信息管理数据库设计

    数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息管理数据库设计 数据库课程设计:长途汽车信息...

    工资管理系统数据库设计报告(数据库课程设计).doc

    报告的引言部分主要阐述了编写目的,即通过设计一个工资管理系统数据库,提高学生对数据库理论知识和实践技能的理解。项目背景可能涉及企业中薪资管理的重要性和复杂性,以及当前手动或半自动化处理的不足。 2. ...

    多级目录的数据库设计

    下面将详细讨论多级目录数据库设计的相关知识点。 首先,我们要理解多级目录的概念。在计算机科学中,目录通常表示为一种树状结构,其中每个目录可以包含其他子目录或文件。多级目录意味着目录结构可以有多个级别,...

    数据库系统设计综合实验

    数据库系统设计是一个复杂而重要的任务,它涉及到数据的组织、存储、检索以及管理。在这个“C#-可视化-数据库系统设计综合实验”中,我们将深入探讨如何利用C#编程语言和可视化工具来构建一个功能完备的数据库应用。...

    支付交易平台数据库设计文档

    在数据库设计领域,表是数据存储的基本单位,每一个表都有其特定的功能和结构。例如,“用户登录信息表”用于存储用户登录操作的记录,这通常包括了用户的登录ID、密码、登录时间戳、登录IP地址、登录结果等字段;...

    数据库课程设计----学校的工资管理系统的设计

    1) 通过社会调查,选择一个实际应用的数据库系统课题。 2)进行系统需求分析和系统设计,写出系统分析和设计报告。 3)设计数据模型并进行优化,确定数据库结构、功能结构和系统安全性和完整性要求。 4)完成数据库...

    数据库设计概论,介绍数据库设计的人物和特点、设计方法以及步骤

    数据库设计是信息系统开发的核心环节,它涉及到数据的组织、存储和访问策略,旨在创建一个高效、稳定、可扩展的数据库解决方案。本章深入探讨了数据库设计的各个方面,包括任务、特点、方法和步骤,以及所使用的辅助...

    教务管理系统 数据库设计

    本篇文章将详细介绍一个典型的高校教务管理系统的数据库设计方案,包括需求分析、事务需求分析、概念设计、逻辑设计及物理设计等核心环节。 #### 二、需求分析 需求分析是设计任何信息系统的基础,对于教务管理...

    信息模型与数据库设计

    数据库设计的目的是为了建立一个能够满足应用系统需求的数据库。数据库设计需要考虑到应用系统的需求、数据的特征、存储设备的限制等因素。 在本章中,我们将通过一个客户订货系统的例子来深入分析信息模型与数据库...

    数据库设计教程(第二版)pdf

    根据提供的信息,我们可以推断出这是一本关于数据库设计的教程书籍,并且是其第二版。由于具体的页面内容并未给出,我们将基于标题、描述及标签...对于想要深入了解数据库设计的人来说,本书无疑是一个宝贵的学习资源。

    CMS数据库设计说明书.docx

    本数据库设计说明书的编写目的就在于提供一个明确的数据库设计指南,以便开发者和数据库管理员更好地理解和实施数据库设计。该数据库设计说明书仅适用于产品追踪系统v1.0。 数据库命名规则 数据库命名规则是指...

    设计数据库(表结构设计)

    设计数据库是IT行业中至关重要的一个环节,涉及到数据的组织、存储和访问效率。本文将深入讲解数据库表结构设计的关键步骤和操作。 首先,设计数据库始于分析数据需求。这是设计过程的基础,需要明确数据库的目的,...

Global site tag (gtag.js) - Google Analytics