- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 数据库设计之半结构化存储
业务场景:用户填一些单据,然后上报,完成审批。单据中有几个字段是需要统计的,业务并不复杂。 看似简单的场景,当开发人员拿出PDM设计的时候,我惊呆了,密密麻麻的有接近70张表,每张表都是一百多个字段。开发人员抱怨,花了一周的时间来做数据库设计,实在是太麻烦了。 设计方案1,我问能不能把单据进行归类,一类单据设计成一张表,用一个字段区分是那张单据,这样会减少很多表。得到的回复是
2014-09-28 09:33:04 2118
原创 数据库设计之EAV(实体、属性、值)
有这么一个业务,用于客户记录每天做的事情,由于是非常专业的事情,需要专业的记录本,这种记录本有20多种。实际工作中也是有20多样的记录本,记录本的格式每隔一年会有点变动。如何进行数据库设计? 有两种方案: 1.为每个记录本建单独的表。 2.动态表,把记录本的属性放入到字典中,记录本的内容以实体、属性、值的形式存储。 --存储记录本的格式 createta
2014-09-26 09:39:09 9057
原创 数据库设计之外键的思考
关于是否使用外键在业界也没有统一的标准,大家争论的焦点是数据一致性和性能上。 支持使用外键方,强调如果不使用外键,数据一致性无法保证,性能消耗可以忽略。 反对使用外键方,数据一致性可以通过程序保证,性能有大问题,数据维护很麻烦,如果是大系统,整个外键的关系就像编制的一张大网。再者开发人员很难真正用好外键。 其实两种观点我都支持,现状是我基本没用过外键。没使用外键会出现
2014-09-23 19:51:39 1753
原创 数据库设计之主键的思考
根据第二范式,主键是必须的。主键还是是唯一的,主键也被作为外键引用建立表和表之间的关系。从这几个方面讨论主键(数据库是Oracle): 1.主键的命名 最近看到由于架构使用hibernate的原因,导致所有主键的命名是ID,我觉得非常糟糕,如部门表(department),用户表(user),角色表(role),这些表如果关联都是id之间关联,非常难辨认这个叫ID是那张表的,如
2014-09-23 18:06:35 1918 3
原创 数据库设计之存储多值的问题
存储多值的问题在设计数据库时是很普遍的问题,看到很多开发人员在上面吃了亏,我觉得有必要拿出来说。业务场景:一个业务单据,有多个联系人。一个设备维护工作,有多个维护班组。下面来举个例子createtable BILL( bill_id numberprimarykey, bill_name varchar2(20), bill_contentvarchar2(200
2014-09-22 09:17:21 6386 3
原创 Oracle alter index disable/unusable的区别
alter index index_name disable,enable针对函数索引。SQL> create table test as select * from all_objects;SQL> create index ind_t_object_id on test(object_id) nologging;SQL> exec dbms_stats.gather_table_s
2014-09-15 18:01:51 9667
原创 Oracle 在线扩展分区
在对分区表操作是,当一个分区已经有了最大的分区,如何再次扩展分区呢?简单的方式是先删除最大分区,然后添加需要的分区,再次建立最大分区,如果对于7*24小时的系统,可能不行。哪有什么办法呢?下面来做个试验:SQL> select * from v$version;BANNER---------------------------------------------------------
2014-09-15 16:43:55 1707
原创 Oracle数据库设计字段类型选择错误的隐患
数据类型不准确的一个隐患,下面来构造一张表存日期字段,一个存varchar2,一个存date,做一个测试。之前也写过两篇blog:1.字段类型设计与实际业务不符引发的问题1 2.字段类型设计与实际业务不符引发的问题2 SQL> drop table test purge;SQL> create table test as select to_char(to
2014-09-11 19:17:56 1815
转载 数据库设计中的14个技巧
下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的。对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握。并逐步做到:在应用中发展,在发展中应用。 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可
2014-09-11 15:35:46 958
原创 Oracle嵌套表存储格式浅析
Oracle嵌套表很少用,下面来研究下其如何存储的。用一个例子,一个用户对应对个部门。SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edi
2014-09-10 18:55:51 1529
原创 .net控件安装不成功导致功能慢
刚实施反馈,有个功能时快时慢,快的时候1s,慢的时候60s,有点奇怪。先说下部署结构: weblogic + Oracle , jsp struts mybatis。 中间件发布在两台物理机器上(windows的操作系统),在中间件服务器1上访问功能慢,在中间件服务器2上访问功能很快。 1.使用httpwatch,可以看到慢的地方 http://10.15.152
2014-09-09 16:29:17 1201
原创 Oracle 11g下用模板建复合分区
利用模板建复合分区大大的降低了脚本的复杂度,下面来做个试验:--未使用模板的方法建复合分区SQL> drop table test purge;SQL> create table test ( owner VARCHAR2(10), created date, object_name VARCHAR2(10), object_type VARCHA
2014-09-04 15:27:04 1786
原创 Oracle 多键值分区测试
分区可以按照两个字段分区,先比较第一个列,如果满足,则忽略第二列,如果第一个不满足,则需要比较第二个列。这种分区的方式有点难以让人理解,建议不要使用。SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Or
2014-09-02 18:44:39 1336
原创 Oracle 11g 列转行listagg
在Oracle 11g之前列转行有些麻烦,11g之后,非常简单。现在有功能的业务是,有一张test的表记录的是单据的审批信息,id为审批信息的主键,sheet_id为外键,是单据的id,remark为审批的内容,在前端的列表页面上,要看到这个单据所有的审批信息,要显示在一个格子里面。SQL> drop table test purge;SQL> create table test(
2014-09-02 11:37:57 2821
原创 Oracle 11g虚拟列上建分区
在Oracle 11g上,可以在虚拟列上做分区,这个特性还比较有用,下面来做一个测试:SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edi
2014-09-02 10:50:41 1690
原创 index rebuild和rebuild online的区别
1. rebuild 会阻塞dml语句而rebuild online则不会。 2. rebuild online时系统会产生一个SYS_JOURNAL_xxx的IOT类型的系统临时日志表,所有rebuild online时索引的变化都记录在这个表中,当新的索引创建完成后,把这个表的记录维护到新的索引中去,然后drop掉旧的索引,rebuild online就完成了。
2014-09-01 15:29:42 2233
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人