- 浏览: 37169 次
最新评论
这篇本来应该是给xiang和kaka的回复,不过回复的小框框实在是太小了,呵呵,就发到这里,当作《扩展表设计》的续篇吧。
假设一个M系统,系统中有许多模块都需要用到扩展数据。首先,我们把每个需要使用扩展数据模块的代号存在扩展表的主表中:
OID INF_CODE INF_URL INF_STATUS INF_DESC
1111... CUSTOMERDATA ... USE CUSTOMER DATA //用于客户数据
1122... CPUDATA ... USE CPU DATA //用于CPU数据
OID是当前模块的扩展表的GUID,INF_CODE相当于一个标识符。INF_STATUS是表示被使用/不被使用。
接下来,对每一个模块,我们要存下它所需要存数据的栏位:
OID FLD_INFOID FLD_CODE FLD_NAME FLD_SEQN FLD_DATATYPE FLD_STATUS FLD_DESC
2211... 1111... WIFE_NAME 妻子姓名 0 string USE 客户妻子姓名
2212... 1111... CID_SEX 孩子性别 1 dropdown USE 客户孩子性别
2221... 1122... OLD_FRE 打磨前频率 0 decimal USE CPU打磨前频率
2222... 1122... REM_BRA 打磨批次 1 string USE 打磨批次
这里OID是当前栏位的GUID。FLD_INFOID是关联到前面主表的OID的外键,表示当前这一列属于哪一个模块。FLD_DATATYPE是限定当前列所填值的类型。FLD_SEQN是这一列的显示顺序。
对于dropdown类型的值,把他们可选的下拉值存在选择值表中。这里存的是关于孩子性别的选择项:)
OID OPT_FLDOID OPT_VALUE OPT_KEY OPT_DEFAULT OPT_STATUS OPT_DESC
3321... 2212... 男 MALE TRUE USE 性别:男
3322... 2212... 女 FEMALE FALSE USE 性别:女
OID是选择值的GUID。OPT_FLDOID是关联到上面栏位表OID的外键,表示当前的选项是哪一列的。
前面的三张表就完成了各个模块的扩展表的格式(即列信息)定义:列、数据类型、顺序、可选值。接下来,就需要存取扩展表的数据(也就是行信息)了。
不论数据是多么的扩展,任何一条扩展数据都要对应到具体的实例上。比如说,客户模块的扩展数据,就需要对应到是客户INTEL的还是客户AMD的,毕竟INTEL和AMD的妻子和孩子可不能共用呀。因此,在扩展数据的明细表之前,我们首先需要定义扩展数据和模块中的具体实例的连接关系。这就是扩展信息表的作用。
假设客户数据表中INTEL的OID是0001...,AMD的OID是0002...。CPU数据表中XEON的OID是0003...,HAMMER的OID是0004...。
OID REC_INFOOID REC_OBJOID REC_STATUS REC_DESC
4411... 1111... 0001... USE 客户:INTEL
4412... 1111... 0002... USE 客户:AMD
4421... 1122... 0003... USE CPU:XEON
4422... 1122... 0004... USE CPU:HAMMER
OID是一条扩展信息的GUID,REC_INFOOID是关联到前面第一个主表的某一个模块的外键。独特的REC_OBJOID是对应到具体模块的数据表中具体实例的OID。如果当前这条扩展信息是客户模块的,则此处关联客户数据表中的OID。如果当前这条扩展信息是CPU模块的,则此处关联CPU数据表的OID。这里虽然不是外键,但是表示的却是外键的含义。
上面的扩展信息表定义了扩展表每一行信息的归属。最后,我们需要真正的填入扩展信息的明细——也就是行内每一列的数据了。这就是最后一张表,也是数据量最大的一张表:扩展信息明细表。
OID RCD_RECORDOID RCD_FLDOID RCD_RECODE
5511... 4411... 2211... AUDERY //INTEL的妻子姓名
5512... 4411... 2212... 3322... //INTEL的孩子性别:女,从选择值表取出
5513... 4412... 2211... HERBEN //AMD的妻子姓名
5514... 4412... 2212... 3321... //AMD的孩子性别:男,从选择值表取出
5521... 4421... 2221... 800 //XEON打磨前频率:800Hz
5522... 4421... 2222... 04-09-08 //XEON打磨批次:04-09-08
5523... 4422... 2221... 2400 //HAMMER打磨前频率:2400Hz
5524... 4422... 2222... 04-09-14 //HAMMER打磨批次:04-09-14
OID是具体明细的GUID。RCD_RECORDOID是对应上一个扩展信息表的OID的外键,表示属于哪一个具体实例。RCD_FLDOID是关联到扩展栏位的OID,表示当前的数据是哪一列下的数据。RCD_RECODE存储的就是具体的明细值了。注意到两个孩子性别,数据都是存的选择值表的对应选项的OID。由于他们的栏位信息已经表明其类型为dropdown,我们就可以从选择值表中取出其应有的数据。
后两张表的信息就是扩展表的行信息了。如果取出来看,我们可以得到以下的结果:
客户数据的扩展表信息:
客户INTEL的扩展表信息:
妻子姓名 孩子性别
AUDERY 女
客户AMD的扩展表信息:
妻子姓名 孩子性别
HERBEN 男
CPU数据模块的扩展表信息:
XEON的扩展表信息:
打磨前频率 打磨批次
800 04-09-08
HAMMER的扩展表信息:
打磨前频率 打磨批次
2400 04-09-14
可惜看到,上面的行和列信息都是从扩展表五张表中取出的。这样,我们就实现了“用表来存表”的功能。同时,这些数据也很容易添加到具体实例的显示内容里(比如可以将INTEL的扩展信息和INTEL的原始信息一起展现),对应付需求变更和数据库结构改变也很有效果。
注:以上数据纯属虚构,只是为了说明有些时候,有些数据不方便直接添加到原来的主表中(比如客户妻子和孩子的信息就不方便直接加入客户数据表中,CPU打磨的信息更不方便直接显示出来),但有些也确实有用(客户的妻子孩子的信息对进行CRM也是有帮助的。)这也算是扩展表的一些特殊用处吧。
注:GUID应该是36位的唯一标识符,此处受长度和视觉效果所限,进行了简化处理
假设一个M系统,系统中有许多模块都需要用到扩展数据。首先,我们把每个需要使用扩展数据模块的代号存在扩展表的主表中:
OID INF_CODE INF_URL INF_STATUS INF_DESC
1111... CUSTOMERDATA ... USE CUSTOMER DATA //用于客户数据
1122... CPUDATA ... USE CPU DATA //用于CPU数据
OID是当前模块的扩展表的GUID,INF_CODE相当于一个标识符。INF_STATUS是表示被使用/不被使用。
接下来,对每一个模块,我们要存下它所需要存数据的栏位:
OID FLD_INFOID FLD_CODE FLD_NAME FLD_SEQN FLD_DATATYPE FLD_STATUS FLD_DESC
2211... 1111... WIFE_NAME 妻子姓名 0 string USE 客户妻子姓名
2212... 1111... CID_SEX 孩子性别 1 dropdown USE 客户孩子性别
2221... 1122... OLD_FRE 打磨前频率 0 decimal USE CPU打磨前频率
2222... 1122... REM_BRA 打磨批次 1 string USE 打磨批次
这里OID是当前栏位的GUID。FLD_INFOID是关联到前面主表的OID的外键,表示当前这一列属于哪一个模块。FLD_DATATYPE是限定当前列所填值的类型。FLD_SEQN是这一列的显示顺序。
对于dropdown类型的值,把他们可选的下拉值存在选择值表中。这里存的是关于孩子性别的选择项:)
OID OPT_FLDOID OPT_VALUE OPT_KEY OPT_DEFAULT OPT_STATUS OPT_DESC
3321... 2212... 男 MALE TRUE USE 性别:男
3322... 2212... 女 FEMALE FALSE USE 性别:女
OID是选择值的GUID。OPT_FLDOID是关联到上面栏位表OID的外键,表示当前的选项是哪一列的。
前面的三张表就完成了各个模块的扩展表的格式(即列信息)定义:列、数据类型、顺序、可选值。接下来,就需要存取扩展表的数据(也就是行信息)了。
不论数据是多么的扩展,任何一条扩展数据都要对应到具体的实例上。比如说,客户模块的扩展数据,就需要对应到是客户INTEL的还是客户AMD的,毕竟INTEL和AMD的妻子和孩子可不能共用呀。因此,在扩展数据的明细表之前,我们首先需要定义扩展数据和模块中的具体实例的连接关系。这就是扩展信息表的作用。
假设客户数据表中INTEL的OID是0001...,AMD的OID是0002...。CPU数据表中XEON的OID是0003...,HAMMER的OID是0004...。
OID REC_INFOOID REC_OBJOID REC_STATUS REC_DESC
4411... 1111... 0001... USE 客户:INTEL
4412... 1111... 0002... USE 客户:AMD
4421... 1122... 0003... USE CPU:XEON
4422... 1122... 0004... USE CPU:HAMMER
OID是一条扩展信息的GUID,REC_INFOOID是关联到前面第一个主表的某一个模块的外键。独特的REC_OBJOID是对应到具体模块的数据表中具体实例的OID。如果当前这条扩展信息是客户模块的,则此处关联客户数据表中的OID。如果当前这条扩展信息是CPU模块的,则此处关联CPU数据表的OID。这里虽然不是外键,但是表示的却是外键的含义。
上面的扩展信息表定义了扩展表每一行信息的归属。最后,我们需要真正的填入扩展信息的明细——也就是行内每一列的数据了。这就是最后一张表,也是数据量最大的一张表:扩展信息明细表。
OID RCD_RECORDOID RCD_FLDOID RCD_RECODE
5511... 4411... 2211... AUDERY //INTEL的妻子姓名
5512... 4411... 2212... 3322... //INTEL的孩子性别:女,从选择值表取出
5513... 4412... 2211... HERBEN //AMD的妻子姓名
5514... 4412... 2212... 3321... //AMD的孩子性别:男,从选择值表取出
5521... 4421... 2221... 800 //XEON打磨前频率:800Hz
5522... 4421... 2222... 04-09-08 //XEON打磨批次:04-09-08
5523... 4422... 2221... 2400 //HAMMER打磨前频率:2400Hz
5524... 4422... 2222... 04-09-14 //HAMMER打磨批次:04-09-14
OID是具体明细的GUID。RCD_RECORDOID是对应上一个扩展信息表的OID的外键,表示属于哪一个具体实例。RCD_FLDOID是关联到扩展栏位的OID,表示当前的数据是哪一列下的数据。RCD_RECODE存储的就是具体的明细值了。注意到两个孩子性别,数据都是存的选择值表的对应选项的OID。由于他们的栏位信息已经表明其类型为dropdown,我们就可以从选择值表中取出其应有的数据。
后两张表的信息就是扩展表的行信息了。如果取出来看,我们可以得到以下的结果:
客户数据的扩展表信息:
客户INTEL的扩展表信息:
妻子姓名 孩子性别
AUDERY 女
客户AMD的扩展表信息:
妻子姓名 孩子性别
HERBEN 男
CPU数据模块的扩展表信息:
XEON的扩展表信息:
打磨前频率 打磨批次
800 04-09-08
HAMMER的扩展表信息:
打磨前频率 打磨批次
2400 04-09-14
可惜看到,上面的行和列信息都是从扩展表五张表中取出的。这样,我们就实现了“用表来存表”的功能。同时,这些数据也很容易添加到具体实例的显示内容里(比如可以将INTEL的扩展信息和INTEL的原始信息一起展现),对应付需求变更和数据库结构改变也很有效果。
注:以上数据纯属虚构,只是为了说明有些时候,有些数据不方便直接添加到原来的主表中(比如客户妻子和孩子的信息就不方便直接加入客户数据表中,CPU打磨的信息更不方便直接显示出来),但有些也确实有用(客户的妻子孩子的信息对进行CRM也是有帮助的。)这也算是扩展表的一些特殊用处吧。
注:GUID应该是36位的唯一标识符,此处受长度和视觉效果所限,进行了简化处理
发表评论
-
入职第一天
2004-07-12 20:20 554很喧闹的一天新人训。当然,可以说是激情四射,或者说是嘈杂无聊。 ... -
迎接部门训
2004-07-13 18:07 511今天开始迎接部门的专业训了,C#、SQL Server、数据库 ... -
生活的颜色
2004-07-14 18:57 575一个诚实的裁判就这样慷慨赴义了,很多很多黑暗中的裁判们却还好端 ... -
历史的沉思
2004-07-16 12:43 639很久以前的一篇文章, ... -
选择的未来
2004-07-17 15:11 491先提一个问题:做一个技术员,技术能力重要还是业务知识重要?再提 ... -
统一的困惑
2004-07-19 20:45 532RUP(Rational统一过程)的基本开发方式是迭代。需求迭 ... -
开发的效率
2004-07-21 17:44 529面对多人协同开发的分层系统,有两种开发方式:其一、一人负责一到 ... -
模型或模式
2004-07-22 23:27 645不论是吵吵嚷嚷的软件工程、XP建模,还是死灰复燃的MDA、一心 ... -
对象的效率
2004-07-28 21:22 537面向对象带来方便的同时亦带来很多的问题。类的继承在扩展的同时也 ... -
泪写的文章
2004-07-29 20:20 512今天我又哭了。一个月前,我还觉得哭于我是很遥远的事情。甚至,我 ... -
期待的精彩
2004-07-31 11:08 534好久好久没有看到国足这么酣畅的胜利了,好久好久没有体会到看球的 ... -
转载的文章
2004-08-01 10:50 502今天转载一篇吧,记录一段可笑的过往。 别了,Dr.Dobb's ... -
TDD 心得
2004-08-03 16:19 788一直觉得,近年来,真正有意义的技术或者思想只有两个:Refac ... -
近期的任务
2004-08-06 12:54 5781、Test Driven Development2、Java ... -
上海印象一
2004-08-09 22:28 567车一进入上海,扑面而来的就是一片一片的高楼,黑压压地便压了过来 ... -
上海印象二
2004-08-10 21:19 522上海当然是天堂,但也是仅对一部分人一部分地区。对大多数人大部分 ... -
转载的文章
2004-08-13 23:38 453O/R Mapping中的继承~ http://www.cnb ... -
生日的祝福
2004-08-15 10:49 710今天是agate的生日。尽管这句话已经被用得很俗,不过我还是想 ... -
等爱的狐狸
2004-08-27 18:16 567“对我来说,你还只是一个小男孩,就像其他千万个小男孩一样。我不 ... -
飞翔的寓言
2004-08-30 20:58 514我才发现梦想与现实间的差别逆着风让自己体验每一个感觉就像是寓言 ...
相关推荐
此SQL语句可以帮助我们获取所有表空间的总大小、已使用大小、剩余大小以及使用百分比,从而为扩展表空间提供依据。 #### 三、创建新的表空间 在Oracle中创建一个新的表空间可以通过以下SQL命令实现: ```sql ...
### Oracle扩展表空间知识点 #### 一、Oracle表空间概述 在Oracle数据库中,表空间是逻辑存储单元,用于组织和管理数据。每个表空间由一个或多个数据文件组成,这些数据文件存储在物理磁盘上。表空间分为系统表...
此外,还可以使用其他方式来扩展表空间的尺寸,例如:增加数据档案。例如: ```sql alter tablespace 表空间名称 add datafile '新数据档案的储存位置' size 新数据档案的尺寸; ``` 例如: ```sql alter tablespace...
此外,考虑使用范式化的关联表也是一种扩展性策略。例如,如果一个“订单”表需要频繁地添加新的商品属性,可以创建一个`order_item_attribute`表,包含订单项ID、属性ID和属性值。这种方式保持了数据的规范性,同时...
当表空间的容量不足时,可能会导致数据库操作失败,如异常`ORA-01653`,提示无法在指定的表空间中扩展表。本文将深入探讨如何检查Oracle表空间的占用情况以及如何扩展表空间。 首先,为了监控表空间的使用情况,...
在扩展表空间之前,我们需要了解当前表空间的使用情况,包括表空间的总大小、已使用的大小、剩余的大小、使用百分比等。我们可以使用以下语句来查询表空间使用情况: ```sql select a.tablespace_name, a.bytes/...
ExpandingStackCells, 在 iOS 9中,使用UIStackView扩展表视图单元 ExpandingStackCells使用栈视图创建扩展表视图单元的示例代码,在 iOS 9中引入。 什么是堆栈视图?UIStackView 是在 iOS 9中引入的一个视图。 它的...
红狮现场仪表PAX仪表可选扩展表PAXCDC1手册中的内容涉及了RS-485串口通讯卡的安装、配置和操作指导。手册详细介绍了PAX系列仪表中RS232和RS485通讯卡的使用方法,这些通讯卡是用于PAX仪表家族的扩展插件卡。本文将...
电路分析是电气工程学科中的核心内容,其中涉及到的关键技能之一就是如何正确使用和扩展仪表的量程。本实验旨在让学生深入理解指针式毫安表的工作原理,掌握毫安表转换为电流表和电压表的方法,以及学会电流表和电压...
2. PAXCDC4通信卡:文件中描述的PAXCDC4是一种可选扩展卡,用于红狮(Red Lion)现场仪表PAX系列的表计设备。这款通信卡可让PAX仪表通过Modbus RS485通信,支持RTU和ASCII两种通信模式,以传输显示值、设定点和复位...
### 表空间自动扩展原理与取消自动扩展方法 在Oracle数据库管理中,表空间的管理是一项重要的任务。当表空间设置为自动扩展时,随着数据的增长,表空间也会自动增加其大小,以适应数据存储的需求。然而,在某些情况...
Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于...在实际应用中,创建和扩展Hash分区表时,应结合业务需求和数据特性,综合考虑分区键的选择、分区数的设定以及扩展策略,以实现最佳的性能和管理效果。
运维脚本,查询数据库表空间大小及使用情况,增加表空间,扩展表空间等。
表扩展是一种策略,允许数据库优化器根据需要选择使用或不使用索引来访问分区表的不同部分,从而平衡读写性能与索引维护成本。 在传统的分区表中,如果创建了局部索引,优化器通常会选择使用索引来提高查询速度。...
为您提供bootstrap table 扩展表下载,bootstrap table是一个具有单选,复选框,排序,分页,扩展和其他附加功能的扩展Bootstrap表。特征:为Twitter Bootstrap创建(支持所有版本)响应式网页设计具有固定标题的可...
使用SQL CLR表值函数扩展Reporting Services,可以为报表提供自定义的数据处理逻辑,这在处理非结构化数据、需要复杂计算或与外部系统交互时非常有用。例如,可以读取XML文件、调用Web服务、处理JSON数据等。 除了...
ASCII表的全面性在于它包含了这些基本的7位ASCII字符,并且通常还会包括扩展ASCII,这是一个更广义的概念,指的是在标准ASCII基础上增加的更多字符集。 扩展ASCII是为了满足更多语言和特殊符号的需求,通常使用8位...
【使用扩展SQL跟踪数据诊断性能】 在数据库性能优化领域,正确地诊断问题至关重要。本文以Oracle数据库为例,探讨如何利用扩展SQL跟踪数据来有效地找出性能瓶颈。作者Cary Millsap指出,传统的检查清单方法,如关注...
### GBK汉字内码扩展规范编码表(二) #### 知识点一:GBK编码标准简介 - **定义**:GBK(汉语内码扩展规范)是中国国家标准GB2312的扩展版本,由国家技术监督局发布。它包含了GB2312的所有汉字和符号,并新增了大量...
本篇文章将详细介绍如何在AIX操作系统上对DB2的裸设备进行扩容,以及涉及的表空间扩展过程。 首先,我们需要理解表空间在DB2中的作用。表空间是DB2数据库中逻辑存储的容器,用于组织和管理数据库对象如表、索引等。...