??xml version="1.0" encoding="utf-8" standalone="yes"?>日本欧美日韩,日韩精品视频三区,色视频成人在线观看免http://www.aygfsteel.com/libin2722/category/25650.html虚其心,可解天下之问Q专其心Q可d下之学;静其心,可悟天下之理Q恒其心Q可成天下之业?/description>zh-cnWed, 10 Mar 2010 12:32:42 GMTWed, 10 Mar 2010 12:32:42 GMT60从PowerDesigner概念设计模型QCDMQ中?U实体关p说?/title><link>http://www.aygfsteel.com/libin2722/articles/314679.html</link><dc:creator>C物</dc:creator><author>C物</author><pubDate>Sat, 06 Mar 2010 04:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/libin2722/articles/314679.html</guid><wfw:comment>http://www.aygfsteel.com/libin2722/comments/314679.html</wfw:comment><comments>http://www.aygfsteel.com/libin2722/articles/314679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/libin2722/comments/commentRss/314679.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/libin2722/services/trackbacks/314679.html</trackback:ping><description><![CDATA[CDM是大多数开发者用PD时最先创建的模型Q也是整个数据库设计最高层的抽象。CDM是徏立在传统的ER图模型理Z上的QER图中有三大主要元素:实体型,属性和联系。其中实体型对应到CDM中的EntityQ属性对应到CDM中每个Entity的AttributeQ在概念上基本上是一一对应的。但在联pMQCDM有了比较大的扩展Q除了保留ER囑֎有的RelationShip概念之外Q还增加了AssociationQInheritance两种实体关系Q下面就让我们分别看看这些关pȝ用法和之间的区别Q下图中被标U的工具栏按钮就是用来向实体中添加这些关pȝQ?br /><img height="34" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xingyukun/pd_rl.gif" width="499" border="0" /><br />  另外Q在介绍所有这些CDM中的元素之前Q笔者先l出一个很单的CDM图,是对我们最最熟悉的学校场景的一个徏模,下文中提到的所有概念在图中都有体现Q大家在看下文的时候可以对照着来看Q?br /><img height="492" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xingyukun/cdm.gif" width="635" border="0" /><br /><br />一. RelationShip(联系)<br />  先给出PD手册里对联系的定义:“A relationship is a link between entities. For example, in a CDM that manages human resources, the relationship Member links the entities Employee and Team, because employees can be members of teams. This relationship expresses that each employee works in a team and that each team has employees.?可见Q也许联pȝ概念真的太简单了吧,所以反而不那么好表qͼ所以PD的文档里也是用一个例子来说明出现了什么样的情冉|们就认ؓ两个实体间是有联pȝ?br />  当我们提起实体间联系的时候,最先想到的恐怕是one to oneQone to many 和many to manyq三U联pȝ型,q些联系cd也是大家最熟悉的。笔者对ER囑֎本的概念q不_N,但在CDM中,联系q有另外三个可以讄的属性:mandatoryQ强制性联p), dependentQ依赖性联p?标定兌Q?和dominantQ统制联p)。这些属性对后面PDM的生成都有比较大的媄响,需要我们一一有所了解。它们都是在联系的属性控刉板中讑֮的,见下图:<br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xingyukun/rel-pro.gif" border="0" /><br />1.mandatory<br />  联系是否h强制性,指的是实体间是不是一定会出现q种联系Q或者换句话_当我们在谈及一个联pȝ应用场景的时候,联系对应的那两个实体型的实体实例的个数可不可能ؓ零。也许这L解释q是有点抽象Q让我们举两个联pȝ例子Q一个是对两边的实体都有强制性的Q另一个则不然?br /><span style="COLOR: #0000ff">Q?Q教?-学生 联系<br />  q个联系首先是一个多对多联系Q因为每个老师可以教多个学生,每个学生也都有多个老师来负责他们的学业。同Ӟq个联系Ҏ师和学生都是强制性的Q也是_不存在Q何一个老师Q他不负责Q何一个学生的教学Q也不存在Q何一个学生,他没有Q何一个Q课老师?br />Q?Q学?-׃?联系<br />  q个联系也是一个多对多关系Q但它对学生q个实体型而言׃是强制的QOptional,可选的Q。每个俱乐部都有臛_一个学生参加,但ƈ不是每个学生都要d加俱乐部的活动。完全可以有一些学生,他们什么俱乐部都没参加?/span><br />上面的例子主要是从概늚角度来区分了mandatory和optional的区别。实际上如果把这个模型对应到我们最后生成的表,如果A-B间的联系对A是mandatory的话Q那么如果在A里面如果包含B的外键,q个外键不能为空|反之可以为空倹{后面我们谈到PDM和实际数据库的时候,大家会看到这一炏V?br />2.dependent<br />  每一个Entity型都有自qIdentifierQ如果两个Entity型之间发生关联时Q其中一个Entity型的Identifierq入另一个Entity型ƈ与该 Entity型中的Identifier共同l成其IdentifierӞq种兌UCؓ标定兌,也叫依赖性关?dependent relationship)。一个Entity型的Identifierq入另一个Entity型后充当光IdentifierӞq种兌UCؓ非标定关?也叫非依赖关联?br />  概念的定义说hq是有些拗口Q说白了其实是?从表关系Q从表要依赖于主?span style="COLOR: #0000ff">。比如在我们pȝ里要记录教师休假的情况,有一个实体型HolidayQ其属性包括休假的开始时间和天数Q每ơ有教师休假的时候,都要在这个表留下记录。从我们的场景描qC可以看到Q实体型假期必须依附于实体型教师Q即对于每一个假期实例,必须指向某一个教师实例?/span><br />  对于依赖型联p,必须注意它不可能是一个多对多联系Q在q个联系中,必须有一个作Z体的实体型。一个dependent联系的从实体可以没有自己的identifier.<br />3.dominant<br />  q个联系属性是最为简单的Q它仅作用于一对一联系Qƈ指明q种联系中的M表关pR在A,B两个实体型的联系中,如果A-->B被指定ؓdominantQ那么A个一对一联系的主表,BZ表,q且在以后生成的PDM中会产生一个引用(如果不指定dominant属性的话会产生两个引用Q?span style="COLOR: #0000ff">比如老师和班U之间的联系Q因为每个班U都有一个老师做班MQQ每个老师也最多只能做一个班U的班主任,所以是一个一对一关系。同Ӟ我们可以老师作ؓ主表Q用老师的工h唯一定一个班MQ联系?/span><br /><br />?AssociationQ关联)<br />  先来看一下PDlassociation的定义:“An association is a connection between entities. In the Merise modeling methodology an association is used to connect several entities that each represents clearly defined objects, but are linked by an event, which may not be so clearly represented by another entity.”?br />  在上一段提到的那些RelationShipQ在很多情况下(特别是多对多关系中)Q我们会把联pM门提出来Q作Z个实体型攑֜两个需要被兌的实体型中间Q在PD中,选中M一个联p,在右键的弹出菜单中选择“Change to Entity”命令即可完成联p{实体的操作)。但有的时候,把若q个实体型之间的联系抽象Z个实体型可能不太合适,q个时候你可以选择些实体型建立一个associationQ那么在生成PDM的时候,所有这些相兛_体型的identifier都会被加入到association对应生成的表模型中。所以,说白了,其实association是实体型的一U特例,用来在徏模的时候更切的表辑֮体间的关联信息。在PD的文档中举了一个录韛_、顾客、商店三个实体型在租借录韛_q个场景上发生关联,然后把租借定义ؓ上述三个实体型之间的association的例子,非常切。在我们的学校模型里Q我定义了家访做师和学生实体型中间的一个associationQ在接下来生的PDM中大家就可能看到q种定义所产生的效果?br /><br />?InheritanceQ承)<br />  q种关系在概念层面是最Ҏ理解的了Q本文就不赘qC?br /><br />前面已经介绍了CDM中关于实体间关系的主要内容,接下来我们就来看看根据这个CDM所生成的PDM是一个什么样子:<br /><img height="479" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xingyukun/pdm.gif" width="660" border="0" /><br />上图中所有标U的部分是我们最应该x的内容,因ؓ他们都是׃我们对实体型间的关系的定义而生的Q下面给Z些简单的说明?br />1. “师生关pZ和“学生俱乐部”这两个表是׃我们的多对多关系而生的?br />2. “假期”表的“工号”字D|׃我们教?假期关系指定为dependent而生的?br />3. “班U”表的“工号”字D|׃我们教?班关系制定为dominant而生的?br />4. “家讎쀝表中的“工号”和“学号”字D|׃家访是教师和学生实体型的association而生的?br />另外Q记得我们在提到dominant属性的时候说q,一个没指定dominant方向的一对一联系生两个引用,下面我们把原本的CDM中的教师-班关系q行一个小的修改Q去掉这个relationship的dominant定义Q那么最l生的PDM中教师表和班U表互相包含对方的主键(׃我们的班U表没有自己的主键,所以只能在班表中看到多出来的?Q截囑֦下:<br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xingyukun/pdm-part.gif" /><br />对照q个PDM截图和上一个PDM截图之间的区别,大家可以很容易得看出dominant属性对一个一对一关系的作用?br /><br />  好了Q说到这里,本文暂时告一D落了。文中提到的Q都是经怋用PD的同志和W者一h天都会碰到的一些概c只有我们把q些概念弄得很清楚,对PD的用才能事半功倍。笔者也在网上找q关于PD的资料,发现有h值的资源很少。如果哪位老兄有比较好的资源或者书Q还h荐一二?br />应一位朋友的要求Q将本文中用到的CDM文g攑֜q里Q?a >school.rar</a><br /><img src ="http://www.aygfsteel.com/libin2722/aggbug/314679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/libin2722/" target="_blank">C物</a> 2010-03-06 12:45 <a href="http://www.aygfsteel.com/libin2722/articles/314679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>知?/title><link>http://www.aygfsteel.com/libin2722/articles/160952.html</link><dc:creator>C物</dc:creator><author>C物</author><pubDate>Fri, 16 Nov 2007 03:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/libin2722/articles/160952.html</guid><wfw:comment>http://www.aygfsteel.com/libin2722/comments/160952.html</wfw:comment><comments>http://www.aygfsteel.com/libin2722/articles/160952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/libin2722/comments/commentRss/160952.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/libin2722/services/trackbacks/160952.html</trackback:ping><description><![CDATA[<p>1.sqlserver中的pȝ?br />      sysobjects<br />     q个表可以查出来所以有的数据库里面的表的名U?br />     ?br />     select name from sysobjects where xtype=?<br />      q里?表示不同的数据库的类?br />    其类型有Q?br />     CQ检查约束?<br />  DQ默认的U束 <br />  FQ外键约?<br />  LQ日?<br />  PQ存储过E?<br />  PKQ主键约?<br />  RFQ复制过滤存储过E?<br />  SQ系l表?<br />  TRQ触发器 <br />  UQ用于表根{?<br />  UQQ独特的U束?<br />  VQ视?<br />  XQ被扩展的存储过E?</p> <p>2.mysql中的Ҏ有的q个database里面的表查询的sql:<br />    show tables from your_database<br /> 江淮汽R<br /> 600418<br /> 10 ?2 <br /> 7.5?/p> <p>标准股䆾<br /> <br /> <br /> String.prototype.trim = function() { <br />  return this.replace(/(^\s*)|(\s*$)/g, "");<br /> }<br /> [di:n]<br /> n.<br />  q安Q男子名Q?br /> </p> <img src ="http://www.aygfsteel.com/libin2722/aggbug/160952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/libin2722/" target="_blank">C物</a> 2007-11-16 11:25 <a href="http://www.aygfsteel.com/libin2722/articles/160952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于oracle的一些知?/title><link>http://www.aygfsteel.com/libin2722/articles/160951.html</link><dc:creator>C物</dc:creator><author>C物</author><pubDate>Fri, 16 Nov 2007 03:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/libin2722/articles/160951.html</guid><wfw:comment>http://www.aygfsteel.com/libin2722/comments/160951.html</wfw:comment><comments>http://www.aygfsteel.com/libin2722/articles/160951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/libin2722/comments/commentRss/160951.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/libin2722/services/trackbacks/160951.html</trackback:ping><description><![CDATA[<p>1、用P  <br />    select username from dba_users;  <br />   改口?nbsp; <br />    alter user spgroup identified by spgtest;  <br />   2、表I间Q?nbsp; <br />    select * from dba_data_files;  <br />    select * from dba_tablespaces;//表空?nbsp; </p> <p>   select tablespace_name,sum(bytes), sum(blocks)  <br />     from dba_free_space group by tablespace_name;//I闲表空?nbsp; </p> <p>   select * from dba_data_files  <br />     where tablespace_name='RBS';//表空间对应的数据文g  </p> <p>   select * from dba_segments  <br />     where tablespace_name='INDEXS';  <br />   3、数据库对象Q?nbsp; <br />    select * from dba_objects;  //得到所有的I间的里面的所有表Q包括系l本w的?br />    CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE BODY?nbsp; <br />    PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE、UNDEFINED、VIEW?nbsp; <br />   4、表Q?nbsp; <br />    select * from dba_tables;  //得到所有空间的里面的MYOBJECT<br />    analyze my_table compute statistics;->dba_tables??nbsp; <br />    select extent_id,bytes from dba_extents  <br />    where segment_name='CUSTOMERS' and segment_type='TABLE'  <br />    order by extent_id;//表用的extent的信息。segment_type='ROLLBACK'查看回滚D늚I间分配信息  <br />    列信息:  <br />     select distinct table_name  <br />     from user_tab_columns  <br />     where column_name='SO_TYPE_ID';  <br />   5、烦引:   <br />    select * from dba_indexes;//索引Q包括主键烦?nbsp; <br />    select * from dba_ind_columns;//索引?nbsp; <br />    select i.index_name,i.uniqueness,c.column_name  <br />     from user_indexes i,user_ind_columns c  <br />      where i.index_name=c.index_name  <br />      and i.table_name ='ACC_NBR';//联接使用  <br />   6、序列:  <br />    select * from dba_sequences;  <br />   7、视图:  <br />    select * from dba_views;  <br />    select * from all_views;  <br />   text 可用于查询视囄成的脚本  <br />   8、聚:  <br />    select * from dba_clusters;  <br />   9、快照:  <br />    select * from dba_snapshots;  <br />   快照、分区应存在相应的表I间?nbsp; <br />   10、同义词Q?nbsp; <br />    select * from dba_synonyms  <br />     where table_owner='SPGROUP';  <br />     //if owner is PUBLIC,then the synonyms is a public synonym.  <br />      if owner is one of users,then the synonyms is a private synonym.  <br />   11、数据库链:  <br />    select * from dba_db_links;  <br />   在spbase下徏数据库链  <br />    create database link dbl_spnew  <br />    connect to spnew identified by spnew using 'jhhx';  <br />    insert into acc_nbr@dbl_spnew  <br />    select * from acc_nbr where nxx_nbr='237' and line_nbr='8888';  <br />   12、触发器Q?nbsp; <br />    select * from dba_trigers;  <br />   存储q程Q函Cdba_objects查找?nbsp; <br />   其文本:select text from user_source where name='BOOK_SP_EXAMPLE';  <br />   建立出错Qselect * from user_errors;  <br />   oracleL存储过E,函数{Y件放在SYSTEM表空间?nbsp; <br />   13、约束:  <br />   Q?Q约束是和表兌的,可在create table或alter table table_name add/drop/modify来徏立、修攏V删除约束?nbsp; <br />   可以临时止U束Q如Q?nbsp; <br />    alter table book_example  <br />    disable constraint book_example_1;  <br />    alter table book_example  <br />    enable constraint book_example_1;  <br />   Q?Q主键和外键被称U束Q而not null和unique之类的约束被UCؓ列约束。通常主键和外键作ؓ单独的命名约束放在字D列表下面,而列U束可放在列定义的同一行,q样更具有可L?nbsp; <br />   Q?Q列U束可从表定义看出,即describe;表约束即主键和外键,可从dba_constraints和dba_cons_columns 查?nbsp; <br />    select * from user_constraints  <br />    where table_name='BOOK_EXAMPLE';  <br />    select owner,CONSTRAINT_NAME,TABLE_NAME  <br />     from user_constraints  <br />     where constraint_type='R'  <br />     order by table_name;  <br />   Q?Q定义约束可以无名(pȝ自动生成U束名)和自己定义约束名Q特别是主键、外键)  <br />   如:create table book_example  <br />     (identifier number not null);  <br />     create table book_example  <br />     (identifier number constranit book_example_1 not null);  <br />   14、回滚段Q?nbsp; <br />   在所有的修改l果存入盘前,回滚D中保持恢复该事务所需的全部信息,必须以数据库发生的事务来相应定其大(DML语句才可回滚Qcreate,drop,truncate{DDL不能回滚Q?nbsp; <br />   回滚D|?q发事务/4Q但不能过50Q每个回滚D大够处理一个完整的事务Q?nbsp; <br />    create rollback segment r05  <br />    tablespace rbs;  <br />    create rollback segment rbs_cvt  <br />    tablespace rbs  <br />    storage(initial 1M next 500k);  <br />   使回滚段在线  <br />    alter rollback segment r04 online;  <br />   用dba_extents,v$rollback_segs监测回滚D늚大小和动态增ѝ?nbsp; <br />   回滚D늚区间信息  <br />    select * from dba_extents  <br />    where segment_type='ROLLBACK' and segment_name='RB1';  <br />   回滚D늚D信?其中bytes昄目前回滚D늚字节?nbsp; <br />    select * from dba_segments  <br />     where segment_type='ROLLBACK' and segment_name='RB1';  <br />   Z物指定回归段  <br />    set transaction use rollback segment rbs_cvt  <br />   针对bytes可以使用回滚D回~?nbsp; <br />    alter rollback segment rbs_cvt shrink;  <br />    select bytes,extents,max_extents from dba_segments  <br />     where segment_type='ROLLBACK' and segment_name='RBS_CVT';  <br />   回滚D늚当前状态信息:  <br />    select * from dba_rollback_segs  <br />     where segment_name='RB1';  <br />   比多回滚D늊态statusQ回滚段所属实例instance_num  <br />   查优化值optimal  <br />    select n.name,s.optsize  <br />     from v$rollname n,v$rollstat s  <br />      where n.usn=s.usn;  <br />   回滚D中的数?nbsp; <br />    set transaction use rollback segment rb1;/*回滚D名*/  <br />    select n.name,s.writes  <br />     from v$rollname n,v$rollstat s  <br />      where n.usn=s.usn;  <br />   当事务处理完毕,再次查询$rollstatQ比较writes(回滚D|目字节数)差|可确定事务的大小?nbsp; <br />   查询回滚D中的事?nbsp; <br />    column rr heading 'RB Segment' format a18  <br />    column us heading 'Username' format a15  <br />    column os heading 'Os User' format a10  <br />    column te heading 'Terminal' format a10  <br />    select r.name rr,nvl(s.username,'no transaction') us,s.osuser os,s.terminal te  <br />     from v$lock l,v$session s,v$rollname r  <br />      where l.sid=s.sid(+)  <br />      and trunc(l.id1/65536)=R.USN  <br />      and l.type='TX'  <br />      and l.lmode=6  <br />    order by r.name;  <br />   15、作?nbsp; <br />   查询作业信息  <br />    select job,broken,next_date,interval,what from user_jobs;  <br />    select job,broken,next_date,interval,what from dba_jobs;  <br />   查询正在q行的作?nbsp; <br />    select * from dba_jobs_running;  <br />   使用包exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (10/(24*60*60))')加入作业。间?0U钟  <br /> exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (11/(24*60))')加入作业。间?1分钟使用包exec dbms_job.remove<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </p> <p>/**oracle的表创徏*/<br /> create table USERINFO(<br />   USERID NUMBER(8) NOT NULL,<br />   USERNAME VARCHAR2(20),<br />   PASSWR VARCHAR2(20),<br />   EMAIL VARCHAR2(20),<br />   STATE NUMBER(1) DEFAULT 0,<br />   EMPID NUMBER(8),<br />   CONSTRAINT PK_USER PRIMARY KEY(USERID)<br /> )<br />  /***增加兌条g****/<br />  ALTER TABLE USERINFO <br />  ADD CONSTRAINT FK_USER FOREIGN KEY(EMPID) REFERENCES EMP (EMPID)<br /> select * from user_tables;--得到用户下的表名及表I间><br /> select  * from user_tab_cols;--得到用户下所有表Q表字段Q类型及长度----><br /> select * from user_tab_columns; --得到用户下所有表Q表字段Q类型及长度----><br /> select * from user_col_comments;--得到用户下表字段的注?gt;<br /> select * from user_tab_comments;--得到表类型,注释><br /> select * from user_cons_columns;---得到用户表下的约束关p?表名,字段?gt;<br /> select * from user_constraints;--得到用户表下的约束关p?表名,U束cd><br /> comment on table USERINFO is '用户信息';--注释表名><br /> comment on column USERINFO.USERID is '用户~号';--字段注释><br /> /*---列出某个用户下所有表的信?-*/<br /> select * from user_tab_comments A,user_tables B where A.table_name=B.table_name and A.table_type='TABLE';<br /> /*----列出某个表的主键信息------*/<br /> select A.table_name,A.constraint_name,A.column_name from user_cons_columns A,user_constraints B <br /> where A.constraint_name=B.constraint_name and B.constraint_type='P' and B.table_name='EMPLOVE';<br /> /*----列出某个表的外键信息------*/<br /> select A.table_name,A.constraint_name,B.column_name from user_constraints A,user_cons_columns B<br /> where A.constraint_name=B.constraint_name and B.table_name='EMPLOVE' and A.constraint_type='R';<br /> /*----需要得到字D늚信息和备?---*/  <br /> select distinct A.column_name,A.data_type||'('||A.data_length||')',B.comments from user_tab_cols A,user_col_comments B <br /> where  A.table_name=B.table_name and A.column_name=B.column_name and A.table_name='EMP';<br /> /*----日期格式的增?--*/<br /> insert into employee values(to_date('2006-06-10','yyyy-mm-dd'));<br /> /*----日期间的相减---*/<br /> select to_number(to_char(curdate,'dd'))-to_number(to_char(olddate,'dd')) from datetable;<br /> /*----oracle分页----*/<br /> select * from (select t.*,rownum r_id from tablename t) where r_id between 1 and 10;<br /> select * from (select t.*,rownum r_id from tablename t) where r_id >=1 and r_id<=10;--不可排序?br /> select t.*,rowid from tablename t where rownum<=20 minus select t.*,rowid from tablename t where rownum<=10<br /> select cc.* from (select bb.*,rownum r_id from (select * from tablename) bb where rownum<=20 ) cc where cc.r_id>=10<br /> select * from (select * from deptinfo where rownum <=20 minus select * from deptinfo where rownum<=10) order by deptid;---可排序?br /> /*-----备注表的查询----*/<br /> select decode(emptype,0,(select xlname from xueli B where B.xlid=A.posttype),1,(select zcname from zhicheng C where C.Zcid=A.posttype)) from emp A;</p> <p>/*********************----oracle高应用-----**********************/<br /> /*--创徏游标在某?-*/<br /> create or replace package packagename<br />   as<br />     type ref_cursor is ref cursor;<br /> end;<br /> /*---存储q程的分?--*/<br /> ---**********1><br /> create or replace procedure getOnePage(curpage in number,page_record in number,rc in out packagename.ref_cursor)<br />  as<br />    begin<br />       open rc for select * from (select t.*,rownum id from deptinfo t order by t.deptid)<br />        where id between (curpage-1)*page_record and curpage*page_record;<br />    end;<br /> ---**********2><br /> create or replace procedure getOnePage2(curpage in number,page_record in number,cond in varchar2,rc in out packagename.ref_cursor)<br />  as<br />    str_sql varchar2(500);<br />    begin<br />        str_sql:='select * from (select t.*,rownum id from deptinfo t where 1=1 '||cond||' order by t.deptid)<br />        where id between '||(curpage-1)*page_record || ' and '|| curpage*page_record;<br />        open rc for str_sql;<br />    end;<br /> /*---新增的存储过E?--*/<br /> create or replace procedure newDept<br /> (deptid deptinfo.deptid%type,<br />  deptname deptinfo.deptname%type,<br />  deptnum deptinfo.deptnum%type,<br />  deptdesc deptinfo.deptdesc%type)<br /> as<br />     begin<br />       insert into deptinfo(deptid,deptname,deptnum,deptdesc)values(deptid,deptname,deptnum,deptdesc);<br />       commit;<br />     end;<br /> /*---修改的存储过E?--*/<br />   create or replace procedure updateDept(did in number,num in number)<br />     as<br />       begin<br />          update deptinfo set deptnum=num where deptid=did;<br />          commit;<br />       end;<br /> /******************************-----oracle函数---*********************************/<br /> /*-----得到ȝ?--*/<br /> create or replace function getTableCount(v_sql in char) return number<br />  as <br />    counts number;<br />    begin<br />       execute immediate 'select count(1) from ('||v_sql||')' into counts;  <br />       return counts;<br />    exception<br />    when others then<br />    raise;<br />    end;<br /> /*****---------------oracle函数分页---------------------*******/<br /> <------通用-------><br /> create or replace function getTableResult(result_sql in varchar2,curpage in number default null,page_record in number default null,sortfield in varchar2 default null,sorttype in number default null,countrecord out number)<br />  return itfuture.ref_cursor<br />   as<br />    vsql varchar2(1000);<br />    startpos number;<br />    endpos number;<br />    resultcursor itfuture.ref_cursor;<br />    begin<br />      countrecord:=getTableCount(result_sql);------------------调用总计录方?gt;<br />      vsql:=result_sql;<br />      if(sortfield is not null) then<br />        vsql:=vsql||' order by '||sortfield;<br />        if(sorttype='1')then <br />        vsql:=vsql||' asc ';<br />        else <br />        vsql:=vsql||' desc ';<br />        end if;<br />      end if;   <br />      if((curpage is not null)and(page_record is not null)) then<br />        startpos:=((curpage-1)*page_record+1);<br />        endpos:=curpage*page_record;<br />        vsql:='select cc.* from (select bb.*,rownum r_id from('||vsql||') bb where rownum<'||endpos||' ) cc where cc.r_id>'||startpos;<br />      end if;<br />      open resultcursor for vsql;<br />      return resultcursor;<br />      exception<br />      when others then<br />      raise;<br />    end; <br /> <----------2---------><br /> create or replace function f_getOnePage(curpage number,page_record number,cond varchar2) return itfuture.ref_cursor<br />  as<br />    rc itfuture.ref_cursor;<br />    str_sql varchar2(2000);<br />    a NUMBER;<br />    begin<br />        a:=6;<br />        str_sql:='select * from (select t.*,rownum id from deptinfo t where 1=1 '||cond||' order by t.deptid)<br />        where id between '||(curpage-1)*page_record || ' and '|| curpage*page_record;<br />        open rc for str_sql;<br />        return rc;<br />    end;<br /> /*-----------------在包下创建函?-------------------*/<br /> <----包下函数定义----><br /> create or replace package itfuture<br />  as<br />   type ref_cursor is ref cursor;<br />   function f_getOnePage(curpage number,page_record number,cond varchar2) return itfuture.ref_cursor;<br />  end;<br /> <----包下函数实现----><br /> create or replace package body itfuture<br />  is<br />  function f_getOnePage(curpage number,page_record number,cond varchar2) return itfuture.ref_cursor<br />  as<br />    rc itfuture.ref_cursor;<br />    str_sql varchar2(2000);<br />    a NUMBER;<br />    begin<br />        a:=6;<br />        str_sql:='select * from (select t.*,rownum id from deptinfo t where 1=1 '||cond||' order by t.deptid)<br />        where id between '||(curpage-1)*page_record || ' and '|| curpage*page_record;<br />        open rc for str_sql;<br />        return rc;<br />    end;<br />   end;</p> <p><br /> /***************************************java中存储过E的调用***************************/</p> <p>String query="{call getOnePage(?,?,?)}";<br /> CallableStatement cs=open.conn.prepareCall(query);<br />       cs.setInt(1,1);<br />       cs.setInt(2,10);<br />       cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);<br />       cs.execute();<br /> ResultSet rs=(ResultSet)cs.getObject(3);</p> <p>/***************************************java中函数的调用***************************/<br /> String query="begin :1 :=itfuture.f_getOnePage(:2,:3,:4);end;";<br />       CallableStatement cs=open.conn.prepareCall(query);<br />       cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);<br />       cs.setInt(2,1);<br />       cs.setInt(3,5);<br />       cs.setString(4,null);<br />       cs.execute();<br />       ResultSet rs=(ResultSet)cs.getObject(1);<br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </p> <p>/**oracle的表创徏*/<br /> create table USERINFO(<br />   USERID NUMBER(8) NOT NULL,<br />   USERNAME VARCHAR2(20),<br />   PASSWR VARCHAR2(20),<br />   EMAIL VARCHAR2(20),<br />   STATE NUMBER(1) DEFAULT 0,<br />   EMPID NUMBER(8),<br />   CONSTRAINT PK_USER PRIMARY KEY(USERID)<br /> )<br />  /***增加兌条g****/<br />  ALTER TABLE USERINFO <br />  ADD CONSTRAINT FK_USER FOREIGN KEY(EMPID) REFERENCES EMP (EMPID)<br /> select * from user_tables;--得到用户下的表名及表I间><br /> select  * from user_tab_cols;--得到用户下所有表Q表字段Q类型及长度----><br /> select * from user_tab_columns; --得到用户下所有表Q表字段Q类型及长度----><br /> select * from user_col_comments;--得到用户下表字段的注?gt;<br /> select * from user_tab_comments;--得到表类型,注释><br /> select * from user_cons_columns;---得到用户表下的约束关p?表名,字段?gt;<br /> select * from user_constraints;--得到用户表下的约束关p?表名,U束cd><br /> comment on table USERINFO is '用户信息';--注释表名><br /> comment on column USERINFO.USERID is '用户~号';--字段注释><br /> /*---列出某个用户下所有表的信?-*/<br /> select * from user_tab_comments A,user_tables B where A.table_name=B.table_name and A.table_type='TABLE';<br /> /*----列出某个表的主键信息------*/<br /> select A.table_name,A.constraint_name,A.column_name from user_cons_columns A,user_constraints B <br /> where A.constraint_name=B.constraint_name and B.constraint_type='P' and B.table_name='EMPLOVE';<br /> /*----列出某个表的外键信息------*/<br /> select A.table_name,A.constraint_name,B.column_name from user_constraints A,user_cons_columns B<br /> where A.constraint_name=B.constraint_name and B.table_name='EMPLOVE' and A.constraint_type='R';<br /> /*----需要得到字D늚信息和备?---*/  <br /> select distinct A.column_name,A.data_type||'('||A.data_length||')',B.comments from user_tab_cols A,user_col_comments B <br /> where  A.table_name=B.table_name and A.column_name=B.column_name and A.table_name='EMP';<br /> /*----日期格式的增?--*/<br /> insert into employee values(to_date('2006-06-10','yyyy-mm-dd'));<br /> /*----日期间的相减---*/<br /> select to_number(to_char(curdate,'dd'))-to_number(to_char(olddate,'dd')) from datetable;<br /> /*----oracle分页----*/<br /> select * from (select t.*,rownum r_id from tablename t) where r_id between 1 and 10;<br /> select * from (select t.*,rownum r_id from tablename t) where r_id >=1 and r_id<=10;--不可排序?br /> select t.*,rowid from tablename t where rownum<=20 minus select t.*,rowid from tablename t where rownum<=10<br /> select cc.* from (select bb.*,rownum r_id from (select * from tablename) bb where rownum<=20 ) cc where cc.r_id>=10<br /> select * from (select * from deptinfo where rownum <=20 minus select * from deptinfo where rownum<=10) order by deptid;---可排序?br /> /*-----备注表的查询----*/<br /> select decode(emptype,0,(select xlname from xueli B where B.xlid=A.posttype),1,(select zcname from zhicheng C where C.Zcid=A.posttype)) from emp A;</p> <p>/*********************----oracle高应用-----**********************/<br /> /*--创徏游标在某?-*/<br /> create or replace package packagename<br />   as<br />     type ref_cursor is ref cursor;<br /> end;<br /> /*---存储q程的分?--*/<br /> ---**********1><br /> create or replace procedure getOnePage(curpage in number,page_record in number,rc in out packagename.ref_cursor)<br />  as<br />    begin<br />       open rc for select * from (select t.*,rownum id from deptinfo t order by t.deptid)<br />        where id between (curpage-1)*page_record and curpage*page_record;<br />    end;<br /> ---**********2><br /> create or replace procedure getOnePage2(curpage in number,page_record in number,cond in varchar2,rc in out packagename.ref_cursor)<br />  as<br />    str_sql varchar2(500);<br />    begin<br />        str_sql:='select * from (select t.*,rownum id from deptinfo t where 1=1 '||cond||' order by t.deptid)<br />        where id between '||(curpage-1)*page_record || ' and '|| curpage*page_record;<br />        open rc for str_sql;<br />    end;<br /> /*---新增的存储过E?--*/<br /> create or replace procedure newDept<br /> (deptid deptinfo.deptid%type,<br />  deptname deptinfo.deptname%type,<br />  deptnum deptinfo.deptnum%type,<br />  deptdesc deptinfo.deptdesc%type)<br /> as<br />     begin<br />       insert into deptinfo(deptid,deptname,deptnum,deptdesc)values(deptid,deptname,deptnum,deptdesc);<br />       commit;<br />     end;<br /> /*---修改的存储过E?--*/<br />   create or replace procedure updateDept(did in number,num in number)<br />     as<br />       begin<br />          update deptinfo set deptnum=num where deptid=did;<br />          commit;<br />       end;<br /> /******************************-----oracle函数---*********************************/<br /> /*-----得到ȝ?--*/<br /> create or replace function getTableCount(v_sql in char) return number<br />  as <br />    counts number;<br />    begin<br />       execute immediate 'select count(1) from ('||v_sql||')' into counts;  <br />       return counts;<br />    exception<br />    when others then<br />    raise;<br />    end;<br /> /*****---------------oracle函数分页---------------------*******/<br /> <------通用-------><br /> create or replace function getTableResult(result_sql in varchar2,curpage in number default null,page_record in number default null,sortfield in varchar2 default null,sorttype in number default null,countrecord out number)<br />  return itfuture.ref_cursor<br />   as<br />    vsql varchar2(1000);<br />    startpos number;<br />    endpos number;<br />    resultcursor itfuture.ref_cursor;<br />    begin<br />      countrecord:=getTableCount(result_sql);------------------调用总计录方?gt;<br />      vsql:=result_sql;<br />      if(sortfield is not null) then<br />        vsql:=vsql||' order by '||sortfield;<br />        if(sorttype='1')then <br />        vsql:=vsql||' asc ';<br />        else <br />        vsql:=vsql||' desc ';<br />        end if;<br />      end if;   <br />      if((curpage is not null)and(page_record is not null)) then<br />        startpos:=((curpage-1)*page_record+1);<br />        endpos:=curpage*page_record;<br />        vsql:='select cc.* from (select bb.*,rownum r_id from('||vsql||') bb where rownum<'||endpos||' ) cc where cc.r_id>'||startpos;<br />      end if;<br />      open resultcursor for vsql;<br />      return resultcursor;<br />      exception<br />      when others then<br />      raise;<br />    end; <br /> <----------2---------><br /> create or replace function f_getOnePage(curpage number,page_record number,cond varchar2) return itfuture.ref_cursor<br />  as<br />    rc itfuture.ref_cursor;<br />    str_sql varchar2(2000);<br />    a NUMBER;<br />    begin<br />        a:=6;<br />        str_sql:='select * from (select t.*,rownum id from deptinfo t where 1=1 '||cond||' order by t.deptid)<br />        where id between '||(curpage-1)*page_record || ' and '|| curpage*page_record;<br />        open rc for str_sql;<br />        return rc;<br />    end;<br /> /*-----------------在包下创建函?-------------------*/<br /> <----包下函数定义----><br /> create or replace package itfuture<br />  as<br />   type ref_cursor is ref cursor;<br />   function f_getOnePage(curpage number,page_record number,cond varchar2) return itfuture.ref_cursor;<br />  end;<br /> <----包下函数实现----><br /> create or replace package body itfuture<br />  is<br />  function f_getOnePage(curpage number,page_record number,cond varchar2) return itfuture.ref_cursor<br />  as<br />    rc itfuture.ref_cursor;<br />    str_sql varchar2(2000);<br />    a NUMBER;<br />    begin<br />        a:=6;<br />        str_sql:='select * from (select t.*,rownum id from deptinfo t where 1=1 '||cond||' order by t.deptid)<br />        where id between '||(curpage-1)*page_record || ' and '|| curpage*page_record;<br />        open rc for str_sql;<br />        return rc;<br />    end;<br />   end;</p> <p><br /> /***************************************java中存储过E的调用***************************/</p> <p>String query="{call getOnePage(?,?,?)}";<br /> CallableStatement cs=open.conn.prepareCall(query);<br />       cs.setInt(1,1);<br />       cs.setInt(2,10);<br />       cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);<br />       cs.execute();<br /> ResultSet rs=(ResultSet)cs.getObject(3);</p> <p>/***************************************java中函数的调用***************************/<br /> String query="begin :1 :=itfuture.f_getOnePage(:2,:3,:4);end;";<br />       CallableStatement cs=open.conn.prepareCall(query);<br />       cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);<br />       cs.setInt(2,1);<br />       cs.setInt(3,5);<br />       cs.setString(4,null);<br />       cs.execute();<br />       ResultSet rs=(ResultSet)cs.getObject(1);</p> <img src ="http://www.aygfsteel.com/libin2722/aggbug/160951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/libin2722/" target="_blank">C物</a> 2007-11-16 11:24 <a href="http://www.aygfsteel.com/libin2722/articles/160951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp 70 问答http://www.aygfsteel.com/libin2722/articles/158058.htmlC物C物Sun, 04 Nov 2007 04:59:00 GMThttp://www.aygfsteel.com/libin2722/articles/158058.htmlhttp://www.aygfsteel.com/libin2722/comments/158058.htmlhttp://www.aygfsteel.com/libin2722/articles/158058.html#Feedback0http://www.aygfsteel.com/libin2722/comments/commentRss/158058.htmlhttp://www.aygfsteel.com/libin2722/services/trackbacks/158058.html 1. 问:在JAVA与JSP中要调用一个LINUX上的脚本E序,或WINDOWS上的脚本E序,该怎么写?
{:System.getRuntime().exec("bash < aaa.sh");

2. 问:java中用什么表C双引号
{:"""

3. 问:如何在JSPE序里另起一个线E?
{:
JSP本n是独立U程q行而不象CGI都是独立q程.
一?
Thread t = new Thread("你的对象");
t.start();可以了.
要求你这个对象要实现runnable接口或承thread.

4. 问:jsp如何获得客户端的IP地址Q?br /> {:
request.getRemoteAddr()
看看各个webserver的API文档说明Q一般都有自带的Qresin和tomcat都有

5. 问:E序l止与输出终?br /> {:
E序中止:return;
输出中止out.close();q一句相当于ASP的response.end

6. 问:jsp中如何得C늚URLQ?br /> {:request.getHeader("referer");

7. 问:提交|页的网过期功能是怎么做的Q?br /> {:response.setHader("Expires","0");

8. 问:在JSP|页中如何知道自已打开的页面的名称
{:
request.getRequestURI() ;//文g?br /> request.getRequestURL() ;//全部QRQ?br />
9. 问:提交表单后验证没有通过Q返回提交页面,如何使原提交面中的数据保留Q?br /> {:javascript的go(-1)可以把上늚表单内容重新昄出来,但password域没?br />
10. 问:如何取得http的头信息Q?br /> {:request.getHader(headerName);

11. 问:&&?amp;的区别?
{:
&&是短路的与操作,也就是当C个条件是false的时候,W二个条件不用执?br /> &相反Q两个条件L执行?br />
12. 问:?以正弦曲U的一个周期显C出?br /> {:
public void paint(Graphics g)
{
for(int i=0;i<200;i++)
g.drawString("*",i,(int)(Math.sin(i)*20)+50);
}
}

13. 问:点数相乘后l果不精如100.0 * 0.6 l果{于 60.0004
{:
q不叫错?float和double是这样实现的.如果要精计,java提供了一个strictfp,它的计算遵@IEEE 754标准.而普通的float和double?br />
由地q_点格式或硬件提供的额外_ֺ或表C围?br />
14. 问:如何获得当前用的cursors的位|?
{:
int row = rs.getRow()是当前指针行数,q有isFrist();isBeforeFist();isLast();isAfterLast();可以试是不是在Ҏ名所说的位置

15. 问:表单成功提交了,点后退昄|页q期
{:
?lt;head></head>里面加以下代?br /> <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
或者在表单中加上
<%
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%>

16. 问:接口的简单理?br /> {:接口Z规范,比如我在接口中定义了一个方?
getData()
q是用来从不同的数据库中取数据的,是JDBC的实现对于用?我不要知道每U数据库是如何做?但我知道如何它们要实现这个接口就一定有

q个Ҏ可以供我调用.q样SUN把q个接口l各个数据库开发商,让他们自己实? 但ؓ什么不用承而用接口?因ؓl承只能从一个你c?br />
l承,而接口可以实现多?是说我实现的子cL多个规定好的接口中的功能. q只是简单的理解,{你深入理解抽象的时候就知道抽象到抽?br />
cLZ么还要再抽象到接?

17. 问:怎样~写一个取消按钮(怎样q回上一个页面,象工h的后退按钮Q?
{:
javascript把每ơ浏览过的location都压C一个栈?q个栈就是history,然后你如果要回到W几个页面它做几次POP操作,把最后POP出来

的那个LOCATIONl你. q就是JAVASCRIPT在实现history.go(-x)的原?

18. 问:什么是回调Q?br /> {:
单说,回调用不是让你去监听谁做完了什么事,而是谁做完了什么事报告给? q就是回调用的思想.例子太多?AWT的事?SWING事g模型

都是q样? q有多线E中,如果要控制线E数,不能L查询每个U程是否l束,要在每个U程l束时让U程自己告诉ȝE我l束?你可?br />
开新的U程?

19. 问:要介l一下compareToҎ
{:
compareToҎ是Comparable 接口必需实现的方?只要实现Comparable

可以用Arrays.srot()排序p实现Runnable接口的runpThread()一?

20. 问:如何可以从别的Web服务器检索页, 然后把检索到的网늚HTML代码储存在一个变量中q回q来
{:q是一个简单的WEB ROBOT实现,用URLcdC|页中抓内容,然后自己写一个分析程序从中找出新的URL,不断递归下去p?

21. 问:applet中如何获得键盘的输入
{:application的System.in是当前系l的标准输入,applet因ؓ安全的原因不可能d当前pȝ(客户?的标准输?只能从它的ROOTlg?br />
事g?比如键盘事g中取得键?

22. 问:怎样计算代码执行所p的时_
{:
代码开始取旉Q结束后取时_相减
long t1 = System.currentTimeMillis();
///////////////// your code
long t2 = System.currentTimeMillis() ;
long time = t2-t1;

23. 问:如何获在E序中获得一个文件的ContentTypeQ?br /> {:
URL u = new URL("file:///aaa.txt");
URLConnection uc = u.openConnection();
String s = uc.getContentType();

24. 问:q接池的使用是徏立很多连接池Q还是一个连接池里用多个q接Q?br /> {:
只有在对象源不同的情况下才会发生多个池化,如果你只q一l一个数据源,永远不要用多个连l池. 所以连l池的初始化一定要做成静态的,?br />
且应该在构造对象之?也就是只有在cLOAD的时?别的时候不应该有Q何生成新的连l池的时候?br />
25. 问:JavaMail要怎么安装Q?br /> {:下蝲两个包,一个是javamail包,另一个是jaf包。下载完直接把这两个包不解压加到CLASSPATH?br />
26. 问:怎样把地址栏里的地址锁定Q?br /> {:把你的服务器的可讉K目录索引选项关闭p?M服务器都有一个conf文g,里面都有q个选项?br />
27. 问:在JAVA中怎么取得环境变量啊。比如: TEMP = CQTEMP Q?br /> {:String sss = System.getProperty(key)

28. 问:怎样实现四舍五入Q保留小数点后两位小敎ͼ
{:
import java.text.*;
...
NumberFormat nf=NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
nf.format(numb);

29. 问:Applet和form如何通信Q?br /> {:
取得的参C到param里面
<%
String xxx = request.getParameter("xxx");
%>
<applet>
<param value="<%=xxx%>">
</applet>


30. 问:java-plug-in是什么?
{:Java Runtime Environment的插件。用来运行javaE序。不需要什么特别的讄。等于你的机器里面有了jvm?br />
31. 问:WEB上面怎么栯接上一个EXCEL表格Q?br /> {:
定义面得contentType="application/vnd.ms-excel"Q让面以excel得Ş式打开。同样也可以以word得Ş式打开Qapplication/msword?br />
32. 问:怎样才能避免textarea字数限制Q?br /> {:是用了FORM的默认方法的~故,如果什么也不写默认是GET改用Post卛_Q在Form中定义mothod="post"?br />
33. 问:Z么加?lt;%@page contentType="text/html;charset=gb2312" %>插入数据库的中文Q依然是qQ?br /> {:
q要从环境看,能显C明你的JSP引擎没有问题,但写入数据库时你的JDBC能不能处理中?同一公司不同版本的JDBC都有支持中文和不支持?br />
文的情况,RESIN自带的MYSQL JDBC׃支持,MM的就支持,q有你的数据库类型是否支持中?CHAR的一般支?但是否用binary存储双字节码

34. 问:对于JFrameQhide()Qshow()与setVisibel()有什么区别吗Q?br /> {:
setVisible()从Componentl承q来Q而hide(),show()从Window里面l承q来?br /> Makes the Window visible. If the Window and/or its owner are not yet displa yable, both are made displayable. The Window will

be validated prior to being made visible. If t he Window is already visible, this will bring the Window to the front. 区别?br />
q?br /> 36. 问:sendRedirectZ么不可以转到mms协议的地址的?response.sendRedirect("mms://missiah.adsldns.org:9394");
{:javaq_目前实现的protocol中ƈ没有mms,你可以取pȝ属性java.protocol.handler.pkgs看看它的g有没有mms,所以如果要想重定向

到mms://hostq样和URL,只有生成客户端的JAVASCRIPT让它来重定向

37. 问:JTable中怎样定义各个Columns和Width和怎样讄表格的内定w做靠x居中Q?br /> {:
TableColumn tc = table.getColumn("Name");//取得列名?Name"的列Handle
int currentWidth = tc.getPreferredWidth(); //取得该列当前的宽?br /> tc.setPreferredWidth(200); //讄当前列宽
tc.setMaxWidth(200); //讄该列最大宽?br /> tc.setMinWidth(50); //讄该列最宽?br />
38. 问:Ҏ作是否可用于select语句Q?br /> {:Ҏ作其实是指成批理更新的操?l对不可能用于select操作?br />
39. 问:Z么jsp路径太深文g名太长就无法d文gQ?br /> {:path不能过255长度,不然找不到?q是作业pȝ的事?br />
40. 问:如何让页面不保留~存Q?br /> {:
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>

41. 问:我的applet code 中用到jbutton 时就出错是否׃ie不支持swing package 请问应怎么办?
{:JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar攑֜classpathp?不要加蝲M别的库?br />
42. 问:不知道java是否支持midi格式Q如果支持,应该怎么把wave格式转换成midi格式Q?br /> {:目前q不?可以看一下JMF三个版中对MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成?br />
43. 问:在jsp里面防止用户直接输入urlq去面Q应该怎么做呢Q?br /> {:
一是从web服务器控?Ҏ一目录的所有访问要通过验证.
二是在要讉K的页面中加入控制.q个一般用session,也可以用h状态码实现

44. 问:
例如后台有一计算应用E序Q此E序q算h很慢Q可持箋几分钟到几小Ӟq不,主要是能ȀzdQ,客户d提交后,服务器对?br />
务进行检无误后向服务器后台程序发送信息,q将其激zR要求如下:
1Q首先将后台E序Ȁz,让它执行此Q务(比如Q前台将计算的C代码提交上后Q后台程序程序能马上调用Qƈ其q行Q?br /> 2Q要在前台JSP面中显C行过E信息(׃q行旉长,希望让客L到运行过E中产生的信息)如何完成Q?br />
{:
zL可以?q行一个shell让它去运行后台就?但不可能取出q行信息,因ؓHTTP的超旉制不可能永远{你后台q行?而且信息如果要动?br />
实时推出来就得用SERVER PUSH技术?br />
45. 问:数据库是datetime ?Q插入当前时间到数据库?
{:
java.sql.Date sqlDate = new java.sql.Date();
PreparedStatement pstmt = conn.prepareStatement("insert into foo(time) values(?)");
pstmt.setDate(1,sqlDate);
pstmt.executeUpdate();

46. 问:怎样L字符串前后的I格?br /> {:String.trim()

47. 问:session怎样存取intcd的变量?
{:
session.setAttribute("int", i+"");
int i = Integer.parseInt(session.getAttribute("int"));

48. 问:在javascript中如何输出的floatcd的数据保留两位小数?br /> {:Math.round(aaaaa*100)/100?br />
49. 问:在beanU如何调用session
{:
你可把session对象作ؓ一个参Clbean
在BEAN中定义HttpServletRequest request;HttpSession session;
然后
session = request.getSession(false);
false为如果session为空,不徏立新的session
session作ؓ参数传入.其实只要request传入可?br />
50. 问:如何把txt或word文g按原格式昄在jsp面或servlet上?
{:
其实一个非常简单的解决Ҏ是在服务器的MIME中指点定TEXT和WORD的解释方?然后用JSP或SERVLET生成它就行了,客户端就会自动调用相

应程序打开你的文档?br /> 如果是希望按原格式的昄在页面上Q而不是调用其他程序打开那么你可以试试用WEBDEV协议,可以说这是MS的一个亮?它是在WEB方式下打开

文档,和共享一?完全W合的要求?br />
51. 问:object的cloneҎZ么不能直接调用?
{:
q个Ҏ在object中是protected
Z么要把这个方法定义ؓprotected,q是一个折?它的目的是想知道你这个方法在Object里只是一个标?而不是一个实?比如

public class Object
{
.............
protected Object clone()
{}
}

所以直接承的clone()Ҏq不能做M?你要使用q个Ҏp重蝲q个Ҏq放宽访问权限ؓpublic,或实现cloneable接口. 但它没法

q样告诉你它没有真的实现,只好用protected Ҏ加以警示

52. 问:一个页面中如何h另外一个页面?
{:
要求是这些面必L兌,一是它们都有一个共同的层?也就是说是一个内的分面,当然可以是Q意,帧内再分帧也可以,另一个可

能是当前H口弹出的窗?如果没有联系,那就不可能用一个页面刷新另一个页? 帧内只要一U一U引用就行了.

比如在左帧中一个页面中写top.right.location.reload();那么名ؓright的右帧中的页面就会刷? 弹出的一?用open时的名称h子窗?

子窗口用openerhȝ?br />
53. 问:如何在jsp中怎么样向客户端写cookiesQ?br /> {:
Cookie coo = new Cookie(name, value);
HttpServletResponse.addCookie(name);

54. 问:Z么jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字体宽度不一P
{:是说如果不是指定ؓ{宽字体,每个字体的宽度都是不一L.因此JAVA中用FontMetrics cL取字W宽度?br />
55. 问:String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exeQ?br /> {:
q应该是解析上传时候的二进制流得到的这一行里面格式是固定的,取到name="后面的字W串Q然后把";L。然后取最后一?后面的所有字

W组成一个新字符串就行了?br />
56. 问:如何传值ƈ不刷新页面?
{:
弹出一个页面进行值的选择或者输入,ok后用将gl原H口Q用javascript关闭打开的窗口即可:
window.close();opener.focus();

57. 问:有一个字W串Q?EF0C114EA4"Q如何变为a[0] = 0xEF a[1] = 0x0C a[2] = 0x11 a[3] = 0x4E a[4] = 0xA4Q?br /> {:
String str="EF0C114EA4F";
out.print(str+"<br>");
int l=str.length()/2+str.length()%2,j=0,k=0;
String[] a=new String[l];
for(int i=0;i<l;i++){
if(str.length()-j==1)
k=str.length();
else
k=j+2;
a="0x"+str.substring(j,k);
out.print("a["+Integer.toString(i)+"]="+a+"<br>");
j+=2;
}

58. 问:怎样一个int转换成一个四字节的byte数组Q?br /> {:
int x = 1234567;
byte[] b = new byte[4];
for(int i=0;i<b.length;i++)
{
b = (x >>( i*8)) & 0xFF;
}

59. 问:indexOf()的用需要注意什么?
{:参数是指从第几位Q?Q?Q?Q?..Q开始搜索,而返回值是指搜索到的位|(0Q?Q?Q?.......Q注意是从零v的?br />
60. 问:在Java应用E序中如何动态的d一个按钮?
{:
q里涉及一个组仉l的问题,lg要先于panel被显CZ处存?如果一panel已经昄?那么加在上面你能看到?但如果在同一个panel?

先有button A,假如按下它加了butt on B,q时你如果整个panel重给,那么A本n要重l?它的事g监听没有了,当然也就加不成B?所以如

果要先有另一个panel,当按A时把B加在q个panel上ƈ重绘q个paenl,其实更好的方法是先把B加在panel?同一个也?把它setVisiable(flas

e),按A时设?true?br />
61. 问:book mybook=new book(bookid);book是servlet,出错?br /> {:
book是servlet,能book mybook=new book(bookid);
说明自己实现了servlet容器?不然,servlet能让你自己去调用? servlet如果调用其实和EJBq?%的区别都没有,它们都是自己l承或实C些接

?在这些父cL接口中实C如果和容?打交?的方?然后容器调用q些Ҏ来管理它,让它生成实例,池化,钝化,销?再生{?所以这?br />
写是错误的?br />
62. 问:l定一个字W串5*(5+9)/7怎样计算出结果?
{:
可有两种Ҏ
1。用堆栈完成
2。最单的ҎQ不用编E,如果有Q何一个数据库的化Q用select (5*(5+9)/7) from oneTable

63. 问:如何实现递交表单内容的加密解密?
{:
如果你用IE目前只能用SSL协议,q一层不要你考虑,否则只你用你自己的工具加密传?接收后再解密?至于如何加解,如果要和公认的系l结

?q通用的MD5,RAS{公开法,如果你只是自׃自己?你随便按你的x把数据加上一些东?取回来按规则减掉q些东西,我敢保证?br />
你自己没有Q何h能知道解密方?

64. 问:Z么Integer.parseInt("+1");会抛出NumberFormatException的异常?
{:因ؓ"+"q行在JAVA中被重蝲.pȝ无法定你用的是术加还是字W??br /> q一点可以在JAVASCRIPT中更好地理解:
<form name="t"><input name=s value=1234></form>
var a = document.t.s.value+1;
q时a = 12345,因ؓdocument.t.s.value作ؓ字符?但var a = document.t.s.value-1;
a 是1233,因ؓpȝ知道-q算肯定是算术运?所以把document.t.s.value转换成数?


65. 问:hashCode() 有什么用Z么有时候需要覆盖Object里的hashcode()ҎQ?br /> {:q就是这个对象的w䆾证啊,要不如何区分哪个对象?br />
66. 问:怎样在tomcat中实C个定时执行的东东Q?br /> {:
在应用程序启动时自动q行。servlet2.3中定义了ServletListener,监听Servlet Con text的启动或则关闭(可在配置文g中配|)Q启动时

触发一个守护程序的q行(可以实现java.util.Timer或则 javax.swing.Timer).

67. 问:E序可以输出自己吗?
{:孔d悖论q个非常有名的法?是说Q何程序都不可能输?

68. 问:能够把字W{化成ASCII码?比如?A 转化?65Q?br /> {:
int a='A';
out.println(a);

69. 问:如何区分输入的文字中的全角与半角Q?br /> {:׃不能分L出全角和半角字符的值有什么规?只好把全角符L丑և来了.

70. 问:用户注册后的自动发信E序该怎么做?
{:
q种发信E序不考虑性能,因ؓ不可?U就有一个h注册,我们说的考虑性能的发信程序是指上百万信在队列里要不停发送的那种,象你q个

随便怎么写一个程序都?没有必要用JAVAMAIL.只要指定一个发信的服务器然后用cocketq它?5口就行了.自己用SOCKETqSMTP?5口发一?br />
信就好象两个d之间送一样东?直接递过d?用JAVAMAIL,消息机制是你把q个东西从邮局寄给你的d?  


C物 2007-11-04 12:59 发表评论
]]>
数据库设计标?/title><link>http://www.aygfsteel.com/libin2722/articles/143253.html</link><dc:creator>C物</dc:creator><author>C物</author><pubDate>Thu, 06 Sep 2007 10:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/libin2722/articles/143253.html</guid><wfw:comment>http://www.aygfsteel.com/libin2722/comments/143253.html</wfw:comment><comments>http://www.aygfsteel.com/libin2722/articles/143253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/libin2722/comments/commentRss/143253.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/libin2722/services/trackbacks/143253.html</trackback:ping><description><![CDATA[<p>数据库设计标?<br /> 1Q?数据表字D说?br /> Q?Q?每个表都必须有一个关键字Q如果表中没有可以设|成关键字的字段Q可以添加一个ID字段作ؓ关键字。需要特别注意的是,一些数据库pȝ如果没有关键字,那么允许所有字D|相同的|此时如果对其q行操作Ӟ数据库系l将整条记录作ؓ一个关键字来操作,从而出现多个关键字的问题,D操作出错。对于数字类型的关键字,如果不需要程序或者h为来l护的,将其设|成为标C种子ؓ1Q标C递增量ؓ1的标C字Dc尽量不要用由手工输入的数据作为关键字Q这是由于手工输入的不可靠性容易导致不可预见的后果。设|关键字时尽量避免设|多个字D늚联合关键字?br /> Q?Q?对于非关键字、不允许Ig下数据类型的字段Q日期型、布型、数字型{字D,无论是否有程序自动维护,必须在数据库设计的时候设定其默认倹{?br /> Q?Q?在设定字D长度时Q对于系l固定长度的字段Q不需要更改,对于需要设计者指定长度的字段Q设计者可以根据实际情冉|定,如果对已l有数据的数据表的字D长度羃的时候,必须注意过新数据长度的数据截断问题。对现有数据cd的{换也需要注意是否可以{换,数据长度的问题?br /> 2Q?表字D定义说?br /> 语言--一般来说定义数据库时不要用中文或其他cd文字的字D名Q尽量用英文或者英文加数字来作为字D名Q尽用中文或其他cd文字作ؓ字段名在直接操作数据库时很容易,但是在数据库以及依赖于数据库的前台程序的不同语言操作pȝ的兼Ҏ完全失,当然中文或其他类型文字可以放在字D늚描述或者说明里面v辅助作用?br /> 明确--原则上字D名的定义只要符合数据库pȝ的字D定义要求就可以Q如Q???#8230;…QA、B、C?#8230;…QABC、A12BC?#8230;…Q等都是合法字段Q但是一定的数据库往往是和一定的前台E序联系h的,如果字段名定义不明确Q造成E序在编写过E中的؜乱,E序的可L、可l护性极差?<br /> 准确--字段名尽量用准的英文名字Q如果相同名字的字段有几个,可以用字母或者数字后~区别。不要用系l的保留字作为字D名Q尽量避免用开发语a的保留字作ؓ字段名。字D名可以按照大小写敏感的方式来命名?br /> z?-避免使用不必要的前缀Q如有一个Contact?联系?表,其中有一个联pMh名字的字D,不要使用ContactName作ؓ其字D名Q用Name可以了?br /> 序--按照描述事物或者常规思维模式来安排顺序,不要随意安排序Q虽然Q意顺序的字段都可以,但是对于数据库的l护来说却非帔R烦,特别是字D多的表?br /> 3Q?数据cd的选择 <br /> Q?QID字段不要作ؓ表的主键与其它表兌Q这会影响到该表的数据q移?br /> Q?QText 和Image字段属指针型数据Q主要用来存放二q制大型对象QBLOBQ。这cL据的操作相比其它数据cd较慢Q因此要避开使用?br /> Q?Q各U类型字D늚均有众多的相兛_数支持,例如日期型函敎ͼ在日期的大小比较、加减操作上非常单。但是,在按照日期作为相{条件的查询操作也要用函敎ͼ而用函C为查询的条gӞ服务器无法用先进的性能{略来优化查询而只能进行表扫描遍历每行,因此Q在选择大数据表的关键字D|据类型时应根据在选择查询{略可能避开使用函数的原则加以考虑?<br /> Q?Q注意数值型数据的取D围问题,文本型的数据要保留一定的冗余长度?br /> 4Q?数据库命名规?br /> 不同的数据库产品对对象的命名有不同的要求Q因此,数据库中的各U对象的命名、后台程序的代码~写应采用大写敏感的Ş式,各种对象命名长度不要过30个字W,q样便于应用pȝ适应不同的数据库q_?br /> 5Q?索引的徏?br /> 为加快访问的速度Q对表徏立烦引是加快速度的一个理惛_法,但是索引应该避免用大数据的字D|建立Q如TextQImage以及长数据的字符串型{?br /> 6Q视囄建立<br /> 对于需要访问相兌的表Q如果在应用E序中去处理Q可能会使应用程序的代码~写出现不必要的J复Q而且也会忽视数据库的潜力开发,q种情况的解x法是利用数据库的视图?br /> 7Q导?导出操作注意事项<br /> 不同的数据库pȝ或者相同的数据库系l之间允总导入/导出的方法来在另一个不同的数据库中形成新的数据库或者数据库中的表,q是一个十分简z的ҎQ但是需要注意的是,q样的操作会源表中的一些信息丢失,如关键字、默认值等Q所以在执行完导?导出的操作之后,一定要在目的数据库中重新检查设|相兛_性?br /> 8Q合法性检?br /> 量在数据进入数据库之前Ҏ据进行合法性检验,避免不合法数据进入数据库Q否则数据库的维护将非常困难?注意Q以下附件仅供参考,附g中如有规范与我们的规范矛监ֈ以我们的规范为准?<br /> 摘录附gQ?br /> 数据库设计方法、规范与技?br /> 一、数据库设计q程<br /> 数据库技术是信息资源理最有效的手Dc数据库设计是指对于一个给定的应用环境Q构造最优的数据库模式,建立数据库及其应用系l,有效存储数据Q满用户信息要求和处理要求?br /> 数据库设计中需求分析阶D늻合各个用L应用需求(现实世界的需求)Q在概念设计阶段形成独立于机器特炏V独立于各个DBMS产品的概忉|式(信息世界模型Q,用E-R图来描述。在逻辑设计阶段E-R图{换成具体的数据库产品支持的数据模型如关系模型QŞ成数据库逻辑模式。然后根据用户处理的要求Q安全性的考虑Q在基本表的基础上再建立必要的视图(VIEWQŞ成数据的外模式。在物理设计阶段ҎDBMS特点和处理的需要,q行物理存储安排Q设计烦引,形成数据库内模式?br /> 1. 需求分析阶D?<br /> 需求收集和分析Q结果得到数据字典描q的数据需求(和数据流图描q的处理需求)?<br /> 需求分析的重点是调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求?br /> 需求分析的ҎQ调查组l机构情c调查各部门的业务活动情c协助用h对新系l的各种要求、确定新pȝ的边界?<br /> 常用的调查方法有Q?跟班作业、开调查会、请专h介绍、询问、设计调查表L户填写、查阅记录?br /> 分析和表辄户需求的Ҏ主要包括自顶向下和自底向上两cL法。自向下的l构化分析方法(Structured AnalysisQ简USAҎQ从最上层的系l组l机构入手,采用逐层分解的方式分析系l,q把每一层用数据图和数据字典描q?br /> 数据图表达了数据和处理q程的关pR系l中的数据则借助数据字典QData DictionaryQ简UDDQ来描述?br /> 数据字典是各cL据描q的集合Q它是关于数据库中数据的描述Q即元数据,而不是数据本w。数据字兔R常包括数据V数据结构、数据流、数据存储和处理q程五个部分(臛_应该包含每个字段的数据类型和在每个表内的d??br /> 数据Ҏq?Q{数据名Q数据项含义说明Q别名,数据cdQ长度, <br />          取D_取值含义,与其他数据项的逻辑关系?<br /> 数据l构描述 Q{数据l构名,含义说明Q组?{数据项或数据结构}?<br /> 数据描q?Q{数据名Q说明,数据来源,数据去向, <br />          l成:{数据结构}Q^均流量,高峰期流量} <br /> 数据存储描述 Q{数据存储名,说明Q编P入的数据流Q流出的数据, <br />         l成:{数据结构}Q数据量Q存取方式} <br /> 处理q程描述 Q{处理q程名,说明Q输?{数据流},输出:{数据流? <br />           处理:{简要说明}?</p> <p>2. 概念l构设计阶段 <br /> 通过对用户需求进行综合、归U与抽象QŞ成一个独立于具体DBMS的概忉|型,可以用E-R图表C?<br /> 概念模型用于信息世界的徏模。概忉|型不依赖于某一个DBMS支持的数据模型。概忉|型可以{换ؓ计算Z某一DBMS支持的特定数据模型?<br /> 概念模型特点Q?br /> (1) h较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识?<br /> (2) 应该单、清晰、易于用L解,是用户与数据库设计h员之间进行交的语言?br /> 概念模型设计的一U常用方法ؓIDEF1XҎQ它是把实?联系Ҏ应用到语义数据模型中的一U语义模型化技术,用于建立pȝ信息模型?br /> 使用IDEF1XҎ创徏E-R模型的步骤如下所C?</p> <p>2.1 W零?-初始化工E?br /> q个阶段的Q务是从目的描q和范围描述开始,定建模目标Q开发徏模计划,l织建模队伍Q收集源材料Q制定约束和规范。收集源材料是这阶段的重炏V通过调查和观察结果,业务程Q原有系l的输入输出Q各U报表,攉原始数据QŞ成了基本数据资料表?br /> 2.2 W一?-定义实体<br /> 实体集成员都有一个共同的特征和属性集Q可以从攉的源材料--基本数据资料表中直接或间接标识出大部分实体。根据源材料名字表中表示物的术语以及h"代码"l尾的术语,如客户代码、代理商代码、品代码等其名词部分代表的实体标识出来,从而初步找出潜在的实体QŞ成初步实体表?br /> 2.3 W二?-定义联系<br /> IDEF1X模型中只允许二元联系Qn元联pdd义ؓn个二元联pR根据实际的业务需求和规则Q用实体联pȝ阉|标识实体间的二元关系Q然后根据实际情늡定出q接关系的势、关pd和说明,定关系cdQ是标识关系、非标识关系Q强制的或可选的Q还是非定关系、分cdpR如果子实体的每个实例都需要通过和父实体的关pL标识Q则为标识关p,否则为非标识关系。非标识关系中,如果每个子实体的实例都与而且只与一个父实体兌Q则为强制的Q否则ؓ非强制的。如果父实体与子实体代表的是同一现实对象Q那么它们ؓ分类关系?br /> 2.4 W三?-定义?br /> 通过引入交叉实体除去上一阶段产生的非定关系Q然后从非交叉实体和独立实体开始标识侯选码属性,以便唯一识别每个实体的实例,再从侯选码中确定主码。ؓ了确定主码和关系的有效性,通过非空规则和非多D则来保证Q即一个实体实例的一个属性不能是I|也不能在同一个时L一个以上的倹{找认的定关系Q将实体q一步分解,最后构造出IDEF1X模型的键图(KB图)?br /> 2.5 W四?-定义属?br /> 从源数据表中抽取说明性的名词开发出属性表Q确定属性的所有者。定义非ȝ属性,查属性的非空及非多D则。此外,q要查完全依赖函数规则和非传递依赖规则,保证一个非ȝ属性必M赖于ȝ、整个主码、仅仅是ȝ。以此得C臛_W合关系理论W三范式的改q的IDEF1X模型的全属性视图?br /> 2.6 W五?-定义其他对象和规?br /> 定义属性的数据cd、主键、长度、精度、非I、缺省倹{约束规则等。定义触发器、存储过E、视图、角艌Ӏ同义词、序列等对象信息?/p> <p>3. 逻辑l构设计阶段 <br /> 概늻构{换ؓ某个DBMS所支持的数据模型(例如关系模型Q,q对其进行优化。设计逻辑l构应该选择最适于描述与表辄应概늻构的数据模型Q然后选择最合适的DBMS?br /> E-R图{换ؓ关系模型实际上就是要实体、实体的属性和实体之间的联p{化ؓ关系模式,q种转换一般遵循如下原则: <br /> 1Q一个实体型转换Z个关pL式。实体的属性就是关pȝ属性。实体的码就是关pȝ码?<br /> 2Q一个m:n联系转换Z个关pL式。与该联pȝq的各实体的码以及联pLw的属性均转换为关pȝ属性。而关pȝ码ؓ各实体码的组合?<br /> 3Q一?:n联系可以转换Z个独立的关系模式Q也可以与n端对应的关系模式合ƈ。如果{换ؓ一个独立的关系模式Q则与该联系相连的各实体的码以及联系本n的属性均转换为关pȝ属性,而关pȝ码ؓn端实体的码?<br /> 4Q一?:1联系可以转换Z个独立的关系模式Q也可以与Q意一端对应的关系模式合ƈ?br /> 5Q三个或三个以上实体间的一个多元联p{换ؓ一个关pL式。与该多元联pȝq的各实体的码以及联pLw的属性均转换为关pȝ属性。而关pȝ码ؓ各实体码的组合?<br /> 6Q同一实体集的实体间的联系Q即自联p,也可按上q?:1?:n和m:n三种情况分别处理?<br /> 7Q具有相同码的关pL式可合ƈ?<br /> Zq一步提高数据库应用pȝ的性能Q通常以规范化理论为指|q应该适当C攏V调整数据模型的l构Q这是数据模型的优化。确定数据依赖。消除冗余的联系。确定各关系模式分别属于W几范式。确定是否要对它们进行合q或分解。一般来说将关系分解?NF的标准,卻I<br /> 表内的每一个值都只能被表达一ơ?br /> 表内的每一行都应该被唯一的标识(有唯一键)?br /> 表内不应该存储依赖于其他键的非键信息?</p> <p>4. 数据库物理设计阶D?<br /> 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储l构和存取方法)。根据DBMS特点和处理的需要,q行物理存储安排Q设计烦引,形成数据库内模式?/p> <p>5. 数据库实施阶D?<br /> q用DBMS提供的数据语aQ例如SQLQ及其宿主语aQ例如CQ,Ҏ逻辑设计和物理设计的l果建立数据库,~制与调试应用程序,l织数据入库Qƈq行试运行?数据库实施主要包括以下工作:用DDL定义数据库结构、组l数据入?、编制与调试应用E序、数据库试运?</p> <p>6. 数据库运行和l护阶段 <br /> 数据库应用系l经q试q行后即可投入正式运行。在数据库系l运行过E中必须不断地对其进行评仗调整与修改。包括:数据库的转储和恢复、数据库的安全性、完整性控制、数据库性能的监督、分析和改进、数据库的重l织和重构造?/p> <p>建模工具的?br /> 为加快数据库设计速度Q目前有很多数据库辅助工PCASE工具Q,如Rational公司的Rational RoseQCA公司的Erwin和BpwinQSybase公司的PowerDesigner以及Oracle公司的Oracle Designer{?br /> ERwin主要用来建立数据库的概念模型和物理模型。它能用囑Ş化的方式Q描q出实体、联pd实体的属性。ERwin支持IDEF1XҎ。通过使用ERwin建模工具自动生成、更改和分析IDEF1X模型Q不仅能得到优秀的业务功能和数据需求模型,而且可以实现从IDEF1X模型到数据库物理设计的{变。ERwin工具l制的模型对应于逻辑模型和物理模型两U。在逻辑模型中,IDEF1X工具可以方便地用图形化的方式构建和l制实体联系及实体的属性。在物理模型中,ERwin可以定义对应的表、列Qƈ可针对各U数据库理pȝ自动转换为适当的类型?br /> 设计人员可根据需要选用相应的数据库设计建模工具。例如需求分析完成之后,设计人员可以使用Erwin画ER图,ER图{换ؓ关系数据模型Q生成数据库l构Q画数据图Q生成应用程序?/p> <p>二、数据库设计技?br /> 1. 设计数据库之前(需求分析阶D)<br /> 1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释光求,而且随着开发的l箋Q还要经常询问客户保证其需求仍然在开发的目的之中?br /> 2) 了解企业业务可以在以后的开发阶D节U大量的旉?br /> 3) 重视输入输出?br /> 在定义数据库表和字段需求(输入Q时Q首先应查现有的或者已l设计出的报表、查询和视图Q输出)以决定ؓ了支持这些输出哪些是必要的表和字Dc?br /> 举例Q假如客户需要一个报表按照邮政编码排序、分D和求和Q你要保证其中包括了单独的邮政编码字D而不要把邮政~码p进地址字段里?<br /> 4) 创徏数据字典和ER 图表<br /> ER 图表和数据字典可以让M了解数据库的人都明确如何从数据库中获得数据。ER囑֯表明表之间关pd有用Q而数据字典则说明了每个字D늚用途以及Q何可能存在的别名。对SQL 表达式的文档化来说这是完全必要的?br /> 5) 定义标准的对象命名规?br /> 数据库各U对象的命名必须规范?/p> <p>2. 表和字段的设计(数据库逻辑设计Q?br /> 表设计原?br /> 1) 标准化和规范?br /> 数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式Q但Third Normal FormQ?NFQ通常被认为在性能、扩展性和数据完整性方面达C最好^衡。简单来_遵守3NF 标准的数据库的表设计原则是:"One Fact in One Place"x个表只包括其本n基本的属性,当不是它们本w所h的属性时需q行分解。表之间的关p通过外键相连接。它h以下特点Q有一l表专门存放通过键连接v来的兌数据?br /> 举例Q某个存攑֮户及其有兛_单的3NF 数据库就可能有两个表QCustomer 和Order。Order 表不包含定单兌客户的Q何信息,但表内会存放一个键|该键指向Customer 表里包含该客户信息的那一行?br /> 事实上,Z效率的缘故,对表不进行标准化有时也是必要的?br /> 2) 数据驱动<br /> 采用数据驱动而非编码的方式Q许多策略变更和l护都会方便得多Q大大增强系l的灉|性和扩展性?br /> 举例Q假如用L面要讉K外部数据源(文g、XML 文档、其他数据库{)Q不妨把相应的连接和路径信息存储在用L面支持表里。还有,如果用户界面执行工作之cȝdQ发送邮件、打CW、修改记录状态等Q,那么产生工作的数据也可以存攑֜数据库里。角色权限管理也可以通过数据驱动来完成。事实上Q如果过E是数据驱动的,你就可以把相当大的责Ll用Pqhl护自己的工作流q程?br /> 3) 考虑各种变化<br /> 在设计数据库的时候考虑到哪些数据字D将来可能会发生变更?br /> 举例Q姓氏就是如此(注意是西方h的姓氏,比如x结婚后从夫姓等Q。所以,在徏立系l存储客户信息时Q在单独的一个数据表里存储姓氏字D,而且q附加v始日和终止日{字D,q样可以跟t这一数据条目的变化?字段设计原则<br /> 1) 每个表中都应该添加的3 个有用的字段<br /> o?dRecordCreationDateQ在VB 下默认是Now()Q而在SQL Server 下默认ؓGETDATE()<br /> o?sRecordCreatorQ在SQL Server 下默认ؓNOT NULL DEFAULT USER<br /> o?nRecordVersionQ记录的版本标记Q有助于准确说明记录中出现null 数据或者丢失数据的原因<br /> 2) 对地址和电话采用多个字D?br /> 描述街道地址q短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵zL。还有,电话L和邮件地址最好拥有自q数据表,光h自n的类型和标记cd?br /> 3) 使用角色实体定义属于某类别的?br /> 在需要对属于特定cd或者具有特定角色的事物做定义时Q可以用角色实体来创建特定的旉兌关系Q从而可以实现自我文档化?br /> 举例Q用PERSON 实体和PERSON_TYPE 实体来描qCh员。比方说Q当John Smith, Engineer 提升为John Smith, Director 乃至最后爬到John Smith, CIO 的高位,而所有你要做的不q是改变两个表PERSON 和PERSON_TYPE 之间关系的键|同时增加一个日?旉字段来知道变化是何时发生的。这P你的PERSON_TYPE 表就包含了所有PERSON 的可能类型,比如Associate、Engineer、Director、CIO 或者CEO {。还有个替代办法是改变PERSON 记录来反映新头衔的变化,不过q样一来在旉上无法跟t个人所处位|的具体旉?br /> 4) 选择数字cd和文本类型尽量充?br /> 在SQL 中用smallint 和tinyint cd要特别小心。比如,假如想看看月销售总额Q总额字段cd是smallintQ那么,如果总额过?32,767 ׃能进行计操作了?br /> 而ID cd的文本字D,比如客户ID 或定单号{等都应该设|得比一般想象更大。假讑֮户ID ?0 位数ѝ那你应该把数据库表字段的长度设?2 或?3 个字W长。但q额外占据的I间却无需来重构整个数据库就可以实现数据库规模的增长了?br /> 5) 增加删除标记字段<br /> 在表中包含一?删除标记"字段Q这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔l维护烦引整体性?</p> <p>3. 选择键和索引Q数据库逻辑设计Q?br /> 键选择原则Q?br /> 1) 键设? 原则<br /> o?为关联字D创建外键?br /> o?所有的键都必须唯一?br /> o?避免使用复合键?br /> o?外键L兌唯一的键字段?br /> 2) 使用pȝ生成的主?br /> 设计数据库的时候采用系l生成的键作Z键,那么实际控制了数据库的烦引完整性。这P数据库和非h工机制就有效地控制了对存储数据中每一行的讉K。采用系l生成键作ؓ主键q有一个优点:当拥有一致的键结构时Q找到逻辑~陷很容易?br /> 3) 不要用用L?不让主键h可更新?<br /> 在确定采用什么字D作的键的时候,可一定要心用户要~辑的字Dc通常的情况下不要选择用户可编辑的字段作ؓ键?br /> 4) 可选键有时可做主键<br /> 把可选键q一步用做主键,可以拥有建立强大索引的能力?/p> <p>索引使用原则Q?br /> 索引是从数据库中获取数据的最高效方式之一?5%的数据库性能问题都可以采用烦引技术得到解冟?br /> 1) 逻辑主键使用唯一的成l烦引,对系l键Q作为存储过E)采用唯一的非成组索引Q对M外键列采用非成组索引。考虑数据库的I间有多大,表如何进行访问,q有q些讉K是否主要用作d?br /> 2) 大多数数据库都烦引自动创建的主键字段Q但是可别忘了烦引外键,它们也是l常使用的键Q比如运行查询显CZ表和所有关联表的某条记录就用得上?br /> 3) 不要索引memo/note 字段Q不要烦引大型字D(有很多字W)Q这样作会让索引占用太多的存储空间?br /> 4) 不要索引常用的小型表<br /> 不要为小型数据表讄M键,假如它们l常有插入和删除操作更别这样作了。对q些插入和删除操作的索引l护可能比扫描表I间消耗更多的旉?4. 数据完整性设计(数据库逻辑设计Q?br /> 1) 完整性实现机Ӟ<br /> 实体完整性:主键<br /> 参照完整性:<br /> 父表中删除数据:U联删除Q受限删除;|空?br /> 父表中插入数据:受限插入Q递归插入<br /> 父表中更新数据:U联更新Q受限更斎ͼ|空?br /> DBMS对参照完整性可以有两种Ҏ实现Q外键实现机ӞU束规则Q和触发器实现机?br /> 用户定义完整性:<br /> NOT NULLQCHECKQ触发器<br /> 2) 用约束而非商务规则强制数据完整?br /> 采用数据库系l实现数据的完整性。这不但包括通过标准化实现的完整性而且q包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正性。不要依赖于商务层保证数据完整性;它不能保证表之间Q外键)的完整性所以不能强加于其他完整性规则之上?br /> 3) 强制指示完整?br /> 在有x据进入数据库之前其剔除。激zL据库pȝ的指C完整性特性。这样可以保持数据的清洁而能q开发h员投入更多的旉处理错误条g?br /> 4) 使用查找控制数据完整?br /> 控制数据完整性的最x式就是限制用L选择。只要有可能都应该提供给用户一个清晰的价值列表供光择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找Q国家代码、状态代码等?br /> 5) 采用视图<br /> Z在数据库和应用程序代码之间提供另一层抽象,可以为应用程序徏立专门的视图而不必非要应用程序直接访问数据表。这样做q等于在处理数据库变更时l你提供了更多的自由?/p> <p>5Q?导入/导出声称数据库或数据表操作注意事?br /> 不同的数据库pȝ或者相同的数据库系l之间允总导入/导出的方法来在另一个不同的数据库中形成新的数据库或者数据库中的表,q是一个十分简z的ҎQ但是需要注意的是,q样的操作会源表中的一些信息丢失,如关键字、默认值等Q所以在执行完导?导出的操作之后,一定要在目的数据库中重新检查设|相兛_性?/p> <p>6. 其他设计技?br /> 1) 避免使用触发?br /> 触发器的功能通常可以用其他方式实现。在调试E序时触发器可能成ؓq扰。假如你实需要采用触发器Q你最好集中对它文档化?br /> 2) 使用常用pQ或者其他Q何语aQ而不要用编?br /> 在创Z拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语?br /> 3) 保存常用信息<br /> 让一个表专门存放一般数据库信息非常有用。在q个表里存放数据库当前版本、最q检?修复Q对AccessQ、关联设计文档的名称、客L信息。这样可以实CU简单机制跟t数据库Q当客户抱怨他们的数据库没有达到希望的要求而与你联pLQ这样做寚w客户?服务器环境特别有用?br /> 4) 包含版本机制<br /> 在数据库中引入版本控制机制来定使用中的数据库的版本。时间一长,用户的需求L会改变的。最l可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方ѝ?<br /> 5) ~制文档<br /> Ҏ有的快捷方式、命名规范、限制和函数都要~制文档?br /> 采用l表、列、触发器{加注释的数据库工具。对开发、支持和跟踪修改非常有用?br /> Ҏ据库文档化,或者在数据库自w的内部或者单独徏立文档。这P当过了一q多旉后再回过头来做第2 个版本,犯错的机会将大大减少?br /> 6) 试、测试、反复测?br /> 建立或者修订数据库之后Q必ȝ用户新输入的数据试数据字段。最重要的是Q让用户q行试q且同用户一道保证选择的数据类型满_业要求。测试需要在把新数据库投入实际服务之前完成?br /> 7) 查设?br /> 在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话_针对每一U最l表达数据的原型应用Q保证你查了数据模型q且查看如何取出数据?/p> <p>三、数据库命名规范<br /> 语言--一般来说定义数据库时不要用中文或其他cd文字的字D名Q尽量用英文或者英文或英文加数字来作ؓ字段名,管使用中文或其他类型文字作为字D名在直接操作数据库时很ҎQ但是在数据库以及依赖于数据库的前台E序的不同语a操作pȝ的兼Ҏ完全失,当然中文或其他类型文字可以放在字D늚描述或者说明里面v辅助作用?<br /> 明确--原则上字D名的定义只要符合数据库pȝ的字D定义要求就可以Q如Q???#8230;…QA、B、C?#8230;…QABC、A12BC?#8230;…Q等都是合法字段Q但是一定的数据库往往是和一定的前台E序联系h的,如果字段名定义不明确Q造成E序在编写过E中的؜乱,E序的可L、可l护性差?br /> 准确--字段名尽量用准的英文名字Q如果相同名字的字段有几个,可以用字母或者数字后~区别。不要用系l的保留字作为字D名。字D名可以按照大小写敏感的方式来命名?br /> z?-避免使用不必要的前缀Q如有一个Contact?联系?表,其中有一个联pMh名字的字D,不要使用ContactName作ؓ其字D名Q用Name可以了?br /> 序--按照描述事物或者常规思维模式来安排顺序,不要随意安排序Q虽然Q意顺序的字段都可以,但是对于数据库的l护来说却非帔R烦,特别是字D多的表?/p> <p>1. 实体Q表Q的命名 <br /> 1) 表以名词或名词短语命名,定表名是采用复数还是单数Ş式,此外一些数据库pȝ允许l标定义别名Q给表的别名定义单规则(比方_如果表名是一个单词,别名取单词的前4个字母;如果表名是两个单词,各取两个单词的前两个字母组?个字母长的别名;如果表的名字?个单词组成,从头两个单词中各取一个然后从最后一个单词中再取Z个字母,l果q是l成4 字母长的别名Q其余依ơ类推)对于不同功能的表来说Q表名可以加上适当的前~后面附上采用该表的名字。在命名q程当中Q以明确的名字命名会l应用程序的~写带来极大的方ѝ?br /> 举例Q?<br /> 定义的羃?Sales: Sal 销售;<br /> Order: Ord 订单Q?br /> Detail: Dtl 明细Q?br /> 则销售订单明l表命名为:Sal_Ord_Dtl;<br /> 2) 无论表或者是字段的名UC有一个单词或者没有,量不要使用~写Q而是用完整的单词或者单词加数字l合?br /> 举例Q?br /> 定义的羃?Material 物品Q?br /> 物品表名为:Material;<br /> 但是字段物品~码则用QCode; 名称用:Name;<br /> 3) 兌c通过用下划线q接两个基本cM后,再加前缀R的方式命?后面按照字母序|列两个表名或者表名的~写?br /> 兌表用于保存多对多关系?br /> 如果被关联的表名大于10个字母,必须原来的表名的进行羃写。如果没有其他原因,都用羃写?br /> 举例Q表Object与自w存在多对多的关p?则保存多对多关系的表命名为:R_ObjectQ?br /> ?Depart和Employee;存在多对多的关系Q则兌表命名ؓR_Dept_Emp</p> <p>2. 属性(列)的命?br /> 1) 采用有意义的列名Q表内的列要针对键采用一整套设计规则。每一个表都将有一个自动ID作ؓd,逻辑上的d作ؓW一l候选主健来定义,如果是数据库自动生成的编码,l一命名为:ID;如果是自定义的逻辑上的~码则用~写?ID"的方法命名。如果键是数字类型,你可以用_NO 作ؓ后缀Q如果是字符cd则可以采用_CODE 后缀。对列名应该采用标准的前~和后~?br /> 举例Q销售订单的~号字段命名QSal_Ord_IDQ如果还存在一个数据库生成的自动编P则命名ؓQID?br /> 2) 所有的属性加上有关类型的后缀Q注意,如果q需要其它的后缀Q都攑֜cd后缀之前?br /> ? 数据cd是文本的字段Q类型后~TX可以不写。有些类型比较明昄字段Q可以不写类型后~?br /> 3) 采用前缀命名<br /> l每个表的列名都采用l一的前~Q那么在~写SQL表达式的时候会得到大大的简化。这样做也确实有~点Q比如破坏了自动表连接工L作用Q后者把公共列名同某些数据库联系h?/p> <p>3. 视图的命?br /> 1) 视图以V作ؓ前缀Q其他命名规则和表的命名cMQ?br /> 2) 命名应尽量体现各视图的功能?/p> <p>4. 触发器的命名<br /> 触发器以TR作ؓ前缀Q触发器名ؓ相应的表名加上后~QInsert触发器加'_I'QDelete触发器加'_D'QUpdate触发器加'_U'Q如QTR_Customer_IQTR_Customer_DQTR_Customer_U?/p> <p>5. 存储q程?br /> 存储q程应以'UP_'开_和系l的存储q程区分Q后l部分主要以动宾形式构成Qƈ用下划线分割各个l成部分。如增加代理商的帐户的存储过Eؓ'UP_Ins_Agent_Account'?/p> <p>6. 变量?br /> 变量名采用小写,若属于词lŞ式,用下划线分隔每个单词Q如@my_err_no?/p> <p>7. 命名中其他注意事?<br /> 1) 以上命名都不得超q?0个字W的pȝ限制。变量名的长度限制ؓ29Q不包括标识字符@Q?br /> 2) 数据对象、变量的命名都采用英文字W,止使用中文命名。绝对不要在对象名的字符之间留空根{?br /> 3) 心保留词,要保证你的字D名没有和保留词、数据库pȝ或者常用访问方法冲H?br /> 4) 保持字段名和cd的一致性,在命名字Dƈ为其指定数据cd的时候一定要保证一致性。假如数据类型在一个表里是整数Q那在另一个表里可别变成字符型了?/p> <p><br />  <br /> </p> <img src ="http://www.aygfsteel.com/libin2722/aggbug/143253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/libin2722/" target="_blank">C物</a> 2007-09-06 18:18 <a href="http://www.aygfsteel.com/libin2722/articles/143253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ֳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȷɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֹ</a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank">ӽ</a>| <a href="http://" target="_blank">˳ƽ</a>| <a href="http://" target="_blank">۶</a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank">ҵ</a>| <a href="http://" target="_blank">ν</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">µ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽң</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>