??xml version="1.0" encoding="utf-8" standalone="yes"?>
GRANT ALL PRIVILEGES ON *.* TO admin@% IDENTIFIED BY 'something' WITH GRANT OPTION;
INSERT INTO user VALUES('localhost','admin',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
INSERT INTO user VALUES('%','admin',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
W一句增加了一个admin用户授权通过本地机(localhost)讉KQ密?#8220;something”。第二句则是授与admin用户从Q何其它主机发L讉KQ通配W%Q?br>
当没有用?admin mysql 会自动添加此用户
1. 原始单据与实体之间的关系
可以是一对一、一对多、多对多的关pR在一般情况下Q它们是一对一的关p:即一张原始单据对应且只对应一个实体。在Ҏ情况下,它们可能是一对多或多对一的关p,即一张原始单据对应多个实体,或多张原始单据对应一个实体。这里的实体可以理解为基本表。明这U对应关pdQ对我们设计录入界面大有好处?
〖例1〗:一份员工历资料,在h力资源信息系l中Q就对应三个基本表:员工基本情况表、社会关p表、工作简历表。这是“一张原始单据对应多个实?#8221;的典型例子?
2. 主键与外?/strong>
一般而言Q一个实体不能既无主键又无外键。在EQR 图中, 处于叶子部位的实? 可以定义主键Q也可以不定义主?因ؓ它无子孙), 但必要有外?因ؓ它有父亲)?
主键与外键的设计Q在全局数据库的设计中,占有重要C。当全局数据库的设计完成以后Q有个美国数据库设计专家_“键,到处都是键,除了键之外,什么也没有”Q这是他的数据库设计经验之谈,也反映了他对信息pȝ核心(数据模型)的高度抽象思想。因为:主键是实体的高度抽象Q主键与外键的配对,表示实体之间的连接?
3. 基本表的性质
基本表与中间表、时表不同Q因为它h如下四个Ҏ:
(1) 原子性。基本表中的字段是不可再分解的?
(2) 原始性。基本表中的记录是原始数据(基础数据Q的记录?
(3) 演绎性。由基本表与代码表中的数据,可以z出所有的输出数据?
(4) E_性。基本表的结构是相对E_的,表中的记录是要长期保存的?
理解基本表的性质后,在设计数据库Ӟp基本表与中间表、时表区分开来?
4. 范式标准
基本表及其字D之间的关系, 应尽量满第三范式。但是,满W三范式的数据库设计Q往往不是最好的设计。ؓ了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余Q达CI间换时间的目的?
〖例2〗:有一张存攑֕品的基本表,如表1所C?#8220;金额”q个字段的存在,表明该表的设计不满W三范式Q因?#8220;金额”可以?#8220;单h”乘以“数量”得到Q说?#8220;金额”是冗余字Dc但是,增加“金额”q个冗余字段Q可以提高查询统计的速度Q这是以空间换旉的作法?
在Rose 2002中,规定列有两种cdQ数据列和计列?#8220;金额”q样的列被称?#8220;计算?#8221;Q?#8220;单h”?#8220;数量”q样的列被称?#8220;数据?#8221;?
? 商品表的表结?
商品名称 商品型号 单h 数量 金额
电视?29?2,500 40 100,000
5. 通俗地理解三个范?/strong>
通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中Qؓ了更好地应用三个范式Q就必须通俗地理解三个范?通俗地理解是够用的理解,q不是最U学最准确的理?Q?
W一范式Q?NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
W二范式Q?NF是对记录的惟一性约束,要求记录有惟一标识Q即实体的惟一性;
W三范式Q?NF是对字段冗余性的U束Q即M字段不能由其他字D|生出来,它要求字D|有冗余?
没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时Z提高q行效率Q就必须降低范式标准Q适当保留冗余数据。具体做法是Q在概念数据模型设计旉守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字D,允许冗余?
6. 要善于识别与正确处理多对多的关系
若两个实体之间存在多对多的关p,则应消除q种关系。消除的办法是,在两者之间增加第三个实体。这P原来一个多对多的关p,现在变ؓ两个一对多的关pR要原来两个实体的属性合理地分配C个实体中厅R这里的W三个实体,实质上是一个较复杂的关p,它对应一张基本表。一般来Ԍ数据库设计工具不能识别多对多的关p,但能处理多对多的关系?
〖例3〗:?#8220;图书馆信息系l?#8221;中,“图书”是一个实体,“读?#8221;也是一个实体。这两个实体之间的关p,是一个典型的多对多关p:一本图书在不同旉可以被多个读者借阅Q一个读者又可以借多本图书。ؓ此,要在二者之间增加第三个实体Q该实体取名?#8220;借还?#8221;Q它的属性ؓQ借还旉、借还标志(0表示借书Q?1表示q书)Q另外,它还应该有两个外?“图书”的主键,“读?#8221;的主?Q它能?#8220;图书”?#8220;读?#8221;q接?
7. 主键PK的取值方?/strong>
PK是供E序员用的表间q接工具Q可以是一无物理意义的数字? q序自动加1来实现。也可以是有物理意义的字D名或字D名的组合。不q前者比后者好。当PK是字D名的组合时Q徏议字D늚个数不要太多Q多了不但烦引占用空间大Q而且速度也慢?
8. 正确认识数据冗余
主键与外键在多表中的重复出现, 不属于数据冗余,q个概念必须清楚Q事实上有许多hq不清楚。非键字D늚重复出现, 才是数据冗余Q而且是一U低U冗余,即重复性的冗余。高U冗余不是字D늚重复出现Q而是字段的派生出现?
〖例4〗:商品中的“单h、数量、金?#8221;三个字段Q?#8220;金额”是?#8220;单h”乘以“数量”z出来的,它就是冗余,而且是一U高U冗余。冗余的目的是ؓ了提高处理速度。只有低U冗余才会增加数据的不一致性,因ؓ同一数据Q可能从不同旉、地炏V角色上多次录入。因此,我们提倡高U冗?z性冗?Q反对低U冗?重复性冗??
9. EQR图没有标准答?/strong>
信息pȝ的EQR图没有标准答案,因ؓ它的设计与画法不是惟一的,只要它覆盖了pȝ需求的业务范围和功能内容,是可行的。反之要修改EQR图。尽它没有惟一的标准答案,q不意味着可以随意设计。好的EQ图的标准是Q结构清晰、关联简z、实体个数适中、属性分配合理、没有低U冗余?
10. 视图技术在数据库设计中很有?/strong>
与基本表、代码表、中间表不同Q视图是一U虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口,是基表数据综合的一UŞ? 是数据处理的一U方法,是用h据保密的一U手Dcؓ了进行复杂处理、提高运速度和节省存储空? 视图的定义深度一般不得超q三层。若三层视图仍不够用, 则应在视图上定义临时? 在时表上再定义视图。这样反复交q定? 视图的深度就不受限制了?
对于某些与国家政沅R经、技术、军事和安全利益有关的信息系l,视图的作用更加重要。这些系l的基本表完成物理设计之后,立即在基本表上徏立第一层视图,q层视图的个数和l构Q与基本表的个数和结构是完全相同。ƈ且规定,所有的E序员,一律只准在视图上操作。只有数据库理员,带着多个人员共同掌握?“安全钥匙”Q才能直接在基本表上操作。请读者想惻Iq是Z么?
11. 中间表、报表和临时?
中间表是存放l计数据的表Q它是ؓ数据仓库、输出报表或查询l果而设计的Q有时它没有主键与外?数据仓库除外)。时表是程序员个h设计的,存放临时记录Qؓ个h所用。基表和中间表由DBAl护Q时表q序员自己用程序自动维护?
12. 完整性约束表现在三个斚w
域的完整性:用Check来实现约束,在数据库设计工具中,对字D늚取D围进行定义时Q有一个Check按钮Q通过它定义字D늚值城?
参照完整性:用PK、FK、表U触发器来实现?
用户定义完整性:它是一些业务规则,用存储过E和触发器来实现?
13. 防止数据库设计打补丁的方法是“三少原则”
(1) 一个数据库中表的个数越越好。只有表的个数少了,才能说明pȝ的EQR囑ְ而精Q去掉了重复的多余的实体QŞ成了对客观世界的高度抽象Q进行了pȝ的数据集成,防止了打补丁式的设计Q?
(2) 一个表中组合主键的字段个数少好。因Z键的作用Q一是徏主键索引Q二是做为子表的外键Q所以组合主键的字段个数了Q不仅节省了q行旉Q而且节省了烦引存储空_
(3) 一个表中的字段个数少好。只有字D늚个数了Q才能说明在pȝ中不存在数据重复Q且很少有数据冗余,更重要的是督促读者学?#8220;列变?#8221;Q这样就防止了将子表中的字段拉入C表中去,在主表中留下许多IZ的字Dc所?#8220;列变?#8221;Q就是将主表中的一部分内容拉出去,另外单独Z个子表。这个方法很单,有的人就是不习惯、不采纳、不执行?
数据库设计的实用原则是:在数据冗余和处理速度之间扑ֈ合适的q炏V?#8220;三少”是一个整体概念,l合观点Q不能孤立某一个原则。该原则是相对的Q不是绝对的?#8220;三多”原则肯定是错误的。试惻I若覆盖系l同L功能Q一百个实体(׃千个属? 的EQR图,肯定比二百个实体(׃千个属?的EQR图,要好得多?
提?#8220;三少”原则Q是叫读者学会利用数据库设计技术进行系l的数据集成。数据集成的步骤是将文gpȝ集成为应用数据库Q将应用数据库集成ؓ主题数据库,主题数据库集成为全局l合数据库。集成的E度高Q数据共享性就强Q信息孤岛现象就少Q整个企业信息系l的全局E—R图中实体的个数、主键的个数、属性的个数׃少?
提?#8220;三少”原则的目的,是防止读者利用打补丁技术,不断地对数据库进行增删改Q企业数据库变成了随意设计数据库表?#8220;垃圾?#8221;Q或数据库表?#8220;大杂?#8221;Q最后造成数据库中的基本表、代码表、中间表、时表杂ؕ无章Q不计其敎ͼD企事业单位的信息pȝ无法l护而瘫痪?
“三多”原则M人都可以做到Q该原则?#8220;打补丁方?#8221;设计数据库的歪理学说?#8220;三少”原则是少而精的原则,它要求有较高的数据库设计技巧与艺术Q不是Q何h都能做到的,因ؓ该原则是杜绝?#8220;打补丁方?#8221;设计数据库的理论依据?
14. 提高数据库运行效率的办法
在给定的pȝg和系lY件条件下Q提高数据库pȝ的运行效率的办法是:
(1) 在数据库物理设计Ӟ降低范式Q增加冗? 用触发? 多用存储q程?
(2) 当计非常复杂、而且记录条数非常巨大?例如一千万?Q复杂计要先在数据库外面,以文件系l方式用C++语言计算处理完成之后Q最后才入库q加到表中去。这是电信计费系l设计的l验?
(3) 发现某个表的记录太多Q例如超q一千万条,则要对该表进行水q_剌Ӏ水q_割的做法是,以该表主键PK的某个gؓ界线Q将该表的记录水q_割ؓ两个表。若发现某个表的字段太多Q例如超q八十个Q则垂直分割该表Q将原来的一个表分解Z个表?
(4) Ҏ据库理pȝDBMSq行pȝ优化Q即优化各种pȝ参数Q如~冲Z数?
(5) 在用面向数据的SQL语言q行E序设计Ӟ量采取优化法?
MQ要提高数据库的q行效率Q必M数据库系l优化、数据库设计U优化、程序实现优化Q这三个层次上同时下功夫?
string1
要{换的字符?format_mask 可选项Q日期{换格?
nls_language 可选项. 指定用于转换字符串的nls language.
其中 format_mask主要有以下几U格式:Format Code | Explanation |
---|---|
YEAR | Year, spelled out |
YYYY | 4-digit year |
MM | Month (01-12; JAN = 01). |
MON | Abbreviated name of month. |
MONTH | Name of month, padded with blanks to length of 9 characters. |
D | Day of week (1-7). |
DAY | Name of day. |
DD | Day of month (1-31). |
DDD | Day of year (1-366). |
DY | Abbreviated name of day. |
HH | Hour of day (1-12). |
HH12 | Hour of day (1-12). |
HH24 | Hour of day (0-23). |
MI | Minute (0-59). |
SS | Second (0-59). |
SSSSS | Seconds past midnight (0-86399). |
END 存储q程名字
2.SELECT INTO STATEMENT
select查询的结果存入到变量中,可以同时多个列存储多个变量中,必须有一?br> 记录Q否则抛出异?如果没有记录抛出NO_DATA_FOUND)
例子Q?
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.变量赋?br> V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7.带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量?;
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用pl/sql developer debug
q接数据库后建立一个Test WINDOW
在窗口输入调用SP的代?F9开始debug,CTRL+N单步调试