文档库 最新最全的文档下载
当前位置:文档库 › 数据库中的表

数据库中的表

数据库中的表
数据库中的表

第10章数据库表

在这一章中,我们将讨论各种类型的数据库表,并介绍什么情况下想用哪种类型的数据库表(也就是

说,在哪些情况下某种类型的表比其他类型更适用)。我们会强调表的物理存储特征:即数据如何组织和存储。

从前只有一种类型的表,这千真万确,原先确实只有一种“普通”表。管理这种表就像管理“一个堆”

一样(下一节会给出有关的定义)。后来,Oracle又增加了几类更复杂的表。如今,除了堆组织表外,还有聚簇表(共有3种类型的聚簇表)、索引组织表、嵌套表、临时表和对象表。每种类型的表都有不同的特征,因此分别适用于不同的应用领域。

10.1表类型

在深入讨论细节之前,我们先对各种类型的表给出定义。Oracle中主要有9种表类型:

q 堆组织表(heap organized table):这些就是“普通”的标准数据库表。数据以堆的方式

管理。增加数据时,会使用段中找到的第一个能放下此数据的自由空间。从表中删除数据时,

则允许以后的INSERT和UPDATE重用这部分空间。这就是这种表类型中的“堆”这个名词的

由来。堆(heap)是一组空间,以一种有些随机的方式使用。

528 / 976

q 索引组织表(index organized table):这些表按索引结构存储。这就强制要求行本身有某

种物理顺序。在堆中,只要放得下,数据可以放在任何位置;而索引组织表(IOT)有所不同,

在IOT中,数据要根据主键有序地存储。

q 索引聚簇表(index clustered table):聚簇(cluster)是指一个或多个表组成的组,这些

表物理地存储在相同的数据库块上,有相同聚簇键值的所有行会相邻地物理存储。这种结构可

以实现两个目标。首先,多个表可以物理地存储在一起。一般而言,你可能认为一个表的数据

就在一个数据库块上,但是对于聚簇表,可能把多个表的数据存储在同一个块上。其次,包含

相同聚簇键值(如DEPTNO=10)的所有数据会物理地存储在一起。这些数据按聚簇键值“聚

簇”在一起。聚簇键使用B*树索引建立。

q 散列聚簇表(hash clustered table):这些表类似于聚簇表,但是不使用B*树索引聚簇键

来定位数据,散列聚簇将键散列到聚簇上,从而找到数据应该在哪个数据库块上。在散列聚簇

中,数据就是索引(这是隐喻的说法)。如果需要频繁地通过键的相等性比较来读取数据,散

列聚簇表就很适用。

q 有序散列聚簇表(sorted hash clustered table):这种表类型是Oracle 10g中新增的,

它结合了散列聚簇表的某些方面,同时兼有IOT的一些方面。其概念如下:你的行按某个键值

(如CUSTOMER_ID)散列,而与该键相关的一系列记录以某种有序顺序到达(因此这些记录

是基于时间戳的记录),并按这种有序顺序处理。例如,客户在你的订单输入系统中下订单,

这些订单会按先进先出(first in, first out, FIFO)的方式获取和处理。在这样一个系统中,有

序散列聚簇就是适用的数据结构。

q 嵌套表(nested table):嵌套表是Oracle对象关系扩展的一部分。它们实际上就是系统

生成和维护的父/子关系中的子表。嵌套表的工作类似于SCOTT 模式中的EMP和DEPT。可以

认为EMP是DEPT表的子表,因为EMP 表有一个指向DEPT的外键DEPTNO。嵌套表与子表

的主要区别是:嵌套表不像子表(如EMP)那样是“独立”表。

q 临时表(temporary table):这些表存储的是事务期间或会话期间的“草稿”数据。临时表

要根据需要从当前用户的临时表空间分配临时区段。每个会话只能看到这个会话分配的区段;

它从不会看到其他任何会话中创建的任何数据。

q 对象表(object table):对象表基于某种对象类型创建。它们拥有非对象表所没有的特殊属

性,如系统会为对象表的每一行生成REF(对象标识符)。对象表实际上是堆组织表、索引组

织表和临时表的特例,还可以__________包含嵌套表作为其结构的一部分。

q 外部表(external table):这些表并不存储在数据库本身中,而是放在数据库之外,即放

在平常的操作系统文件中。在Oracle9i 及以上版本中,利用外部表可以查询数据库之外的一个

文件,就好像这个文件也是数据库中平常的表一样。外部表对于向数据库加载数据最有用(外

部表是非常强大的数据加载工具)。Oracle 10g则更进一步,还引入了一个外部表卸载功能,

在不使用数据库链接的情况下,这为在Oracle数据库之间移动数据提供了一种简单的方法。我

们将在第15章更详细地讨论外部表。

q 不论哪种类型的表,都有以下一般信息:

q 一个表最多可以有1000列,不过我不鼓励设计中真的包含这么多列,除非存在某个硬性需

求。表中的列数远远少于1000列时才最有效。Oracle在内部会把列数大于254的行存储在多

个单独的行段(row piece)中,这些行段相互指向,而且必须重新组装为完整的行影像。

529 / 976

q 表的行数几乎是无限的,不过你可能会遇到另外某个限制,使得这种“无限”并不实际。例

如,一般来讲,一个表空间最多有1022个文件(不过,Oracle 10g中有一些新的BIGFILE表

空间,这些表空间可以超出上述文件大小限制)。假设你有一些32GB的文件,也就是说,每

个表空间有32,704GB,就会有2,143,289,344个块,每个块大小为16KB。你可能在每个块上

放160行(每行大约80~100字节)。这样就会有342,926,295,040行。不过,如果对这个

表分区,这个行数还能很容易地翻倍。例如,假设一个表有1024个散列分区,则能有1024×

342,926,295,040行。确实存在着上限,但是在接近这些上限之前,你肯定会遇到另外某个实

际限制。

q 表中的列有多少种排列(以及这些列的函数有多少种排列),表就可以有多少个索引。随着

基于函数的索引的出现,理论上讲,说能创建的索引数是无限的!不过,同样由于存在一些实

际的限制,这会影响真正能创建和维护的索引数。

q 即使在一个数据库中也可以有无限多个表。不过,还是同样的道理,实际的限制会使数据库

中的表数在一个合理的范围内。不可能有数百万个表(这么多表对于创建和管理来说都是不实

际的),但是有数千个表还是允许的。

在下一节中,我们将讨论与表相关的一些参数和术语。在此之后,我们再转而讨论基本的堆组织表,

然后介绍其他类型的表。

10.2术语

在这一节中,我们将介绍与表相关的各种存储参数和术语。并非每种表类型都会用到所有参数。例

如,PCTUSED参数在IOT环境中就没有意义。具体讨论各种表类型时还会分别介绍与之相关的参数。这一节的目标时介绍这些术语,并给出定义。在后面几节中,还会在适当的时候介绍使用特定参数的更多信息。

10.2.1 段

Oracle中的段(segment)是占用磁盘上存储空间的一个对象。尽管有多种类型,不过最常见的段

类型如下:

q 聚簇(cluster):这种段类型能存储表。有两种类型的聚簇:B*树聚簇和散列聚簇。聚簇通

常用于存储多个表上的相关数据,将其“预联结”存储到同一个数据库块上;还可以用于存储

一个表的相关信息。“聚簇”这个词是指这个段能把相关的信息物理的聚在一起。

q 表(table):表段保存一个数据库表的数据,这可能是最常用的段类型,通常与索引段联合

使用。

q 表分区(table partition)或子分区(subpartition):这种段类型用于分区,与表段很相

似。分区表由一个或多个分区段(table partition segment)组成,组合分区表则由一个或多

个表子分区段(table subpartition segment)组成。

q 索引(index):这种段类型可以保存索引结构。

q 索引分区(index partition):类似与表分区,这种段类型包含一个索引的某个片。分区索

引由一个或多个索引分区段(index partition segment)组成。

q Lob分区(lob partition)、lob子分区(lob subpartition)、lob索引(lobindex)和

lob段(lobsegment):lobindex和lobsegment段保存大对象(large object或LOB)的

530 / 976

结构。对包含LOB的表分区时,lobsegment也会分区,lob分区段(lob partition segment)

正是用于此。有意思的是,并没有一种lobindex分区段(lobindex partition segment)类型

——不论出于什么原因,Oracle将分区lobindex标记为一个索引分区(有人很奇怪为什么要

另外给lobindex取一个特殊的名字!)。

q 嵌套表(nested table):这是为嵌套表指定的段类型,它是主/明细关系中一种特殊类型的

“子”表,这种关系随后将详细讨论。

q 回滚段(rollback)和Type2 undo段:undo数据就存储在这里。回滚段是DBA手动创建

的段。Type2 undo段由Oracle自动创建和管理。

举例来说,一个表可以是一个段。索引有可能是一个段。这里我强调了“可能”,这是因为,我们

可以把一个索引划分到不同的段中。所以,索引对象本身只是一个定义,而不是一个物理段,索引可能由多个索引分区组成,而每个索引分区(index partition)是一个段。表可能是一个段,也可能不是。由于

同样的原因,由于表分区,一个表可以有多个表段:或者可以在一个称为聚簇的段中创建一个表,此时这个表可能与其他表同在一个聚簇段中。

不过,最常见的情况是,表是一个段,索引也是一个段。对现在来说,这样考虑最简单。创建一个

表时,通常就是创建一个新的表段,而且如第3章所述,这个段包含区段,区段则包含块。这是平常的存储层次结构。但是要指出重要的一点,只在“通常”情况下才有这种一对一的关系。例如,考虑以下这个

简单的CREATE TABLE语句:

Create table t ( x int primary key, y clob, z blob );

这个语句创建6个段。如果在一个初始为空(什么也没有)的模式中发出下面的CREATE TABLE 语

句,会观察到以下结果:

ops$tkyte@ORA10G> select segment_name, segment_type

2 from user_segments;

no rows selected

ops$tkyte@ORA10G> create table t ( x int primary key, y clob, z blob );

Table created.

ops$tkyte@ORA10G> select segment_name, segment_type

2 from user_segments;

SEGMENT_NAME SEGMENT_TYPE

------------------------------ ------------------

SYS_IL0000063631C00002$$ LOBINDEX

SYS_LOB0000063631C00003$$ LOBSEGMENT

SYS_C009783 INDEX

SYS_IL0000063631C00003$$ LOBINDEX

SYS_LOB0000063631C00002$$ LOBSEGMENT

T TABLE

6 rows selected.

在这个例子中,表本身创建了一个段:如输出中最后一行所示。这里主键约束创建了一个索引段,以

保证惟一性。

注意惟一约束或主键可能创建一个新索引,也可能不创建。如果约束列上已经有一个索引,而且这些列处于索引的前几列,这个约束就会(而且将会)使用这些列(而不再创建创建新索引)。

另外,每个LOB列分别创建了两个段:一个段用于存储字符大对象(character large object, CLOB)

或二进制大对象(binary large object, BLOB)所指的实际数据块,另一个段用于“组织”这些数据块。

LOB为非常大块的信息提供了支持,可以多达几GB。LOB存储在lobsegment的块中,lobindex用于跟

踪这些LOB块在哪里,以及应该以何种顺序来访问它们。

10.2.2 段空间管理

从Oracle 9i开始,管理段空间有两种方法:

q 手动段空间管理(Manual Segment Space Management):由你设置FREELISTS、

FREELIST GROUPS、PCTUSED和其他参数来控制如何分配、使用和重用段中的空间。在这一

章中我会把这种空间管理方法称为MSSM,但是要记住,这是一个我自造的缩写,Oracle文

档中没有这个缩写。

q 自动段空间管理(Automatic Segment Space Management, ASSM):你只需控制与空间

使用相关的一个参数:PCTFREE。创建段时也可以接受其他参数,但是这些参数将被忽略。

MSSM 是Oracle的遗留实现。它已经存在多年,许多版本都支持MSSM。ASSM则在Oracle 9i

Release 1中才首次引入。原先用于控制空间分配和提供高并发性的参数数不胜数,并且需要对这些参数

进行调整,人们不希望还要这么做,这正是设计ASSM的出发点。例如,倘若将FREELISTS参数设置为

默认值1,可能会出现,如果你的段是插入/更新新密集的(有大量插入/更新操作),对自由空间的分配

就会存在竞争。Oracle 要在表中插入一行,或更新一个索引键条目,或者由于更新一行而导致这一行迁

移时(稍后还会更多地介绍这方面的内容),可能需要从与这个段相关的自由块列表中得到一个块。如果

只有一个自由块列表,一次就只有一个事务能查看和修改这个列表,事务之间必须相互等待。在这种情况

下,如果有多个FREELISTS和FREELIST GROUPS,就能提高并发性,因为事务可以分别查看不同的列表,而不会相互竞争。

稍后讨论存储设置时,我还会提到哪些参数用于手工段空间管理,而哪些参数用于自动段空间管理,

不过需要指出,在存储/段特征这方面,应用于ASSM段的存储设置只有:

q BUFFER_POOL

q PCTFREE

q INITRANS

q MAXTRANS(仅用于9i;在10g中,所有段都会忽略这个参数)

其他存储和物理属性参数都不适用于ASSM段。

段空间管理是从段的表空间(而且段从不会跨表空间)继承来的一个属性。段要使用ASSM,就必

须位于支持ASSM空间管理的表空间中。

532 / 976

10.2.3 高水位线

存储在数据库中的表段使用了这个术语。例如,如果把表想象成一个“平面”结构,或者想象成从左

到右依次排开的一系列块,高水平线(high-water mark,HWM)就是包含了数据的最右边的块,如图

图10-1 HWM示意图

图10 -1显示了HWM首先位于新创建表的第一个块中。过一段时间后,随着在这个表中放入数据,

而且使用了越来越多的块,HWM会升高。如果我们删除了表中的一些(甚至全部)行,可能就会有许多

块不再包含数据,但是它们仍在HWM之下,而且这些块会一直保持在HWM之下,直到重建、截除或收

缩这个对象(将段收缩是Oracle 10g的一个新特性,只有当段在一个ASSM表空间中时才支持这个特性)。HWM很重要,因为Oracle在全面扫描段时会扫描HWM之下的所有块,即使其中不包含任何数据。

这会影响全面扫描的性能,特别是当HWM之下的大多数块都为空时。要查看这种情况,只需创建一个有

1,000,000行的表(或者创建其他有大量行的表),然后对这个表执行一个SELECT COUNT(*)。下面再

删除(DELETE)这个表中的每一行,你会发现尽管SELECT COUNT(*)统计出0 行,但是它与统计出

1,000,000所花的时间一样长(如果需要完成块清除,时间可能还会更长:有关内容请参加9.5.5 节)。

这是因为Oracle在忙于读取HWM之下的所有块,查看其中是否包含数据。如果对这个表使用TRUNCATE

而不是删除其中的每一行,你可以比较一下结果有什么不同。TRUNCATE会把表的HWM重置回“0”,

还会截除表上的相关索引。由于以上原因,如果你打算删除表中的所有行,就应该选择使用TRUNCATE (如果可以使用的话)。

在一个MSSM表空间中,段只有一个HWM。不过,在ASSM表空间中,除了一个HWM外,还

有一个低HWM(见图10-2)。在MSSM中,HWM推进时(例如,插入行时),所有块都会并立即

有效,Oracle可以安全地读取这些块。不过,对于ASSM,HWM推进时,Oracle并不会立即格式化所

有块,只有在第一次使用这些块时才会完成格式化,以便安全地读取。所以,全面扫描一个段时,必须知道要读取的块是否“安全”或是否格式化,(这说明,其中不包含有意义的信息,不能对其进行处理)。

533 / 976

为了避免表中每一个块都必须经过这种安全/不安全检查,Oracle同时维护了一个低HWM和一个HWM。Oracle会全表扫描至HWM,对于低HWM以下的所有块会直接读取并加以处理。而对介于低HWM和

HWM之间的块,则必须更加小心,需要参考管理这些块所用的ASSM位图信息来查看应该读取哪些块,

而哪些块应该被忽略。

图10-2 低HWM示意图

10.2.4 freelists

使用MSSM 表空间时,Oracle会在自由列表(freelist)中为有自由空间的对象维护HWM一些的

块。

注意freelists组和freelist组在ASSM表空间中根本就没有;仅MSSM表空间使用这个技术。

每个对象都至少有一个相关的freelist,使用块时,可能会根据需要把块放在freelist上或者从

freelist删除。需要说明的重要一点是,只有位于HWM以下的对象块才会出现在freelist中。仅当freelist

为空时才会使用HWM之上的块,此时Oracle会推进HWM,并把这些块增加到freelist中,采用这种

方式,Oracle会延迟到不得已时才增加对象的HWM。

一个对象可以有多个freelist。如果预计到会有多个并发用户在一个对象上执行大量的INSERT或

UPDATE 活动,就可以配置多个freelist,这对性能提升很有好处(但是可能要以额外的存储空间为代价)。根据需要配置足够多的freelist非常重要。

如果存在多个并发的插入和更新,在这样一个环境中,FREELISTS 可能对性能产生巨大的影响(可能

是促进,也可能是妨碍)。通过一个极其简单的测试就能看出正确地设置FREELISTS有什么好处。请考虑下面这个相对简单的表:

ops$tkyte@ORA10GR1> create table t ( x int, y char(50) ) tablespace MSSM;

Table created.

接下来使用5个并发会话,开始“疯狂地”对这个表执行插入。如果分别测量插入前和插入后与块

相关的系统级等待事件,就会发现长时间的等待,特别是对数据块的等待(试图插入数据)。这通常是因为表(以及索引)上的freelist不足造成的(不过关于索引的有关内容将在下一章更详细介绍)。为此我

使用了Statspack,首先取一个statspace.snap,接下来执行一个脚本开始5个并发的SQL*Plus会话,

等这些会话退出后再取另一个statspace.snap。这些会话运行的脚本很简单,如下:

begin

for i in 1 .. 100000

534 / 976

loop

insert into t values ( i, 'x' );

end loop;

commit;

end;

/

exit;

这是一个非常简单的代码块,此时我是数据库中惟一的用户。按理说,应该得到最佳的性能,因为

我配置了充足的缓冲区缓存,重做日志大小很合适,另外索引也不会减慢速度,而且这是在有两个超线程Xeon CPU的主机上运行,这个主机应该能运行得很快。不过,我看到的结果却是:

Snap Id Snap Time Sessions Curs/Sess Comment

--------- ------------------ -------- --------- -------------------

Begin Snap: 793 29-Apr-05 13:45:36 15 3.9

End Snap: 794 29-Apr-05 13:46:34 15 5.7

Elapsed: 0.97 (mins)

Top 5 Timed Events

~~~~~~~~~~~~~~~~~~ % Total

Event Waits Time (s) Call Time

-------------------------------------------- ------------ ----------- -------------

CPU time 165 53.19

buffer busy waits 368,698 119 38.43

log file parallel write 1,323 21 6.86

latch: cache buffers chains 355 2 .67

enq: HW - contention 2,828 1 .24

对buffer busy waits总共等待了119秒,也就是每个会话大约24秒。导致这些等待的原因完全是:

表中没有配置足够的freelist来应付发生的这种并发活动。

10.11小结

读完这一章后,希望你已经得出这样一个结论:并非所有的表都创建得完全一样。Oracle提供了多

种表类型可供使用。在这一章中,我们介绍了一般情况下表的一些突出的方面,并分析了Oracle为我们提供的各种表类型。

首先,我们介绍了与表相关的一些术语以及存储参数。这里讨论了freelist在多用户环境中的作用,

如果多个人同时频繁地插入/更新一个表,freelist将产生很大影响;另外说明了如果使用ASSM表空间,就不必再考虑freelist。我们研究了PCTFREE和PCTUSED的含义,并为如何正确地设置这些信息提供了一些指导原则。

然后开始介绍各种类型的表,先从最常见的堆表开始。堆组织表是目前大多数Oracle 应用中最常

用的表,这也是默认的表类型。接下来介绍索引组织表(IOT),利用IOT,可以把表数据存储在索引结

构中而不是堆表中。我们了解了这些表适用于哪些情况(如查询表和反向表),在这些情况下,堆表就不617 / 976

合适了,它将只是数据的一个冗余副本。在本章的后面,我们还指出了结合使用IOT与其他表类型确实很有用,特别是嵌套表类型。

我们还介绍了聚簇对象,Oracle中有3种聚簇:索引聚簇、散列聚簇和有序散列聚簇。聚簇有两方

面的目标:

q 使我们能够把多个表的数据共同存储在同一个(多个)数据库块上。

q 是我们能够强制把类似的数据根据某个聚簇键物理地存储在“一起“。例如,采用这种方式,

部门10的所有数据(来自多个表)可以存储在一起。

基于这些特性,我们可以非常快地访问相关的数据,而且只有最少的物理I/O。我们研究了索引聚簇

和散列聚簇之间的主要区别,并讨论了各种聚簇分别在何种情况下适用(和不适用)。

接下来转向嵌套表。我们介绍了嵌套表的语法、语义和用法,了解到嵌套表实际上就是系统生成和

维护的父/子表对,并且知道了Oracle在物理上是如何做到这一点的。我们分析了可以使用不同的表类型来实现嵌套表,默认会使用基于堆的表。我们发现,如果不使用IOT而使用堆表来实现嵌套表,一般这都是说不过去的。

接下来我们介绍了临时表的有关细节,包括如何创建、从哪里得到存储空间,还说明了临时表在运行

时不会引入与并发性相关的任何问题。我们分析了会话级和事务级临时表之间的区别,讨论了Oracle数据库中使用临时表的适当方法。

在这一章的最后,我们讨论了对象表的内部工作原则。我们发现,与嵌套表一样,Oracle的对象表

在底层也有很多“动作“。在此指出:利用关系表上的对象视图可以得到对象表的功能,与此同时还能轻

松地访问底层关系数据。

创建数据库和数据表

创建数据库和数据表 教学内容分析 本节课是高中信息技术(选修4)《数据管理技术》第二章“创建数据库的结构”里2.3.1“创建数据库”与2.3.2“创建数据表”的内容。具体内容是介绍了在Access中创建数据库的结构的步骤,并通过动手实践,学习和尝试创建一个空的“中小学信息技术大赛”数据库,在数据库中创建三个表:参赛选手表、参赛学校表、参赛作品表。在案例学习及任务驱动中边做边学,以激发学生在课堂的学习兴趣,一步一步熟悉Access数据库管理系统软件以及在Access中建立数据库结构的常用方法。 教学对象分析 在前面的学习中,学生已经对“中小学信息技术大赛”比较熟悉,而且对已建立的关系数据模型有了一定的了解,知道利用二维表格可以表示现在最常用的关系数据模型。但是,学生对于计算机上数据库是什么样子、其结构如何,可能还知之甚少。 教学模式 本节内容实践操作较多,而且概念不难理解,以采用案例学习及任务驱动等方法进行教学。 教学目标 (1) 知识与技能 熟悉Access数据库管理系统软件。 掌握在Access中建立数据库结构的常用方法。 (2) 过程与方法 通过参与一个实际的数据库的建立过程,让学生经历和体验如何对数据进行管理的过程,感悟有关的思想与方法。 (3) 情感态度与价值观 通过新技术的应用学习、实践,激发和保持学生对信息技术的求知欲,形成积极主动学习的态度。培养学生合理的信息资源管理习惯。 教学重点、难点、疑点 (1)教学重点:以“中小学信息技术大赛”数据库为例,熟练掌握创建数据库结构的方法,理解数据表中字段类型、字段属性、主键的含义,从而完成三张数据表的创建。 (2)教学难点:熟练掌握创建数据库结构的方法,理解数据表中字段类型、字段属性的含义,从而完成三张数据表的创建。 (3)教学疑点:是否有比教材上的三张表的结构定义更好的结构描述。

数据库表和数据库关系的实现

第五讲数据库表和数据库关系的实现 5.1数据类型 定义数据表的字段、声明程序中的变量时,都需要为他们设置一个数据类型。目的是指定该字段或变量所存放的数据类型,以及需要多少空间。 5.1.1整型:可以用来存放整数数据的字段或变量。有bigint、int、smallint、 两种类型,这两种类型完全相同,一般建议使用numeric。 使用numeric或decimal时,必须指明精确度(即全部有效位数)与小数点位数,例如:numeric(5,2)表示精度为5,总共位数为5位,其中3位整数及2位小数。若不指定,则默认值为numeric(18,0)。精确度可指定的范围为1~38, 取其“近似值”。例如:23456646677799变成 2.3E+13,此类数据类型有float 和real两种。注意:使用float和real类型,若数值的位数超过其有效位数的限

其中varchar及text的实际存储长度会依数据量而调整。如:varchar(10)表示最多可存储10字节,但若只填入5个字符,那么只会占用5字节。char与varchar 最多只能存储8000个字符,若数据超过此长度,请改用text类型。 在使用char及varchar时必须指定字符长度,例如char(50)、varchar(50); 的数据与字符串类型相当类似,Unicode字符串的一个字符是用2个字节存储,而一般字符串是一个字符用1个字节存储。此类数据类型有nchar、nvarchar、ntext。 在使用nchar及nvarchar时必须指定字符长度,例如nchar(50)、nvarchar 据多用16进制表示,而且要加上0x字头)。此类数据类型有binary、varbinary 与image,其特性分别相当于字符串类型的char、varchar、text。image类型还可以用来存放word文件、excel电子表格、以及位图、GIF和JPEG文件。 使用binary及varbinary时须指定字符长度,例如binary(50)、varbinary(30);若未指定,默认值为1。Image类型则不必指定长度。

access第3章数据表习题及答案

第三章创建和维护数据表习题及答案 一、选择题 (1)Access数据库的设计一般由5个步骤组成,对以下步骤的排序正确的是 a.确定数据库中的表b.确定表中的字段 c.确定主关键字d.分析建立数据库的目的 e.确定表之间的关系 A) dabec B) dabce C) cdabe D) cdaeb (2)学校欲建立一个“教学管理”的数据库,由教师表、学生表、课程表、选课成绩表组成,教师表中有教师编号、姓名性别、工作时间、职称、学历、系别等字段,试确认该表的主关键字是 A) 姓名B) 教师编号C) 系别D) 职称 (3)以下字符串不符合Access字段命名规则的是 A) ^_^birthday^_^ B) 生日C) Jim.jeckson D)//注释 (4)某学校欲建立一个“教学管理”的数据库,设计该数据库由教师表、学生表、课程表、选课成绩表组成,其中教师表由TeacherID、TeacherName、sex、[telephone]组成,现确定该表的主关键字为TeacherName。以下分析正确的是 A) 教师表字段命名有错误,其他正确 B) 教师表主关键字选择错误,其他正确 C) 教师表字段命名和主关键字错误 D) 该表设计没有错误 (5)一张“学生”表中,要使“年龄”字段的取值范围设在14~50之间,则在“有效性规则”属性框中输入的表达式为 A) >=14AND<=50 B) >=140R=<50 C) >=50AND<=14 D) >=14&&=<50

(6)可以选择输入数据或空格的输入掩码是 A) 0 B) < C) > D) 9 (7)将所有字符转换为大写的输入掩码是 A) > B) < C) 0 D) A (8)某文本型字段的值只能为字母且不允许超过6个,则将该字段的输入掩码属性定义为 A) AAAAAA B) LLLLLL C) CCCCCC D) 999999 (9)某数据库的表中要添加Intemet站点的网址,则该采用的字段的数据类型是 A) OLE对象数据类型B) 超级链接数据类型 C) 查阅向导数据类型D) 自动编号数据类型 (10)某数据库的表中要添加一张图片,则采用的该字段的数据类型是 A) OLE对象数据类型B) 超级链接数据类型, C) 查阅向导数据类型D) 自动编号数据类型 (11)Access数据库中哪个数据库对象是其他数据库对象的基础? A) 报表B) 表C) 窗体D) 模块 (12)在使用Access创建数据库中的表时,以下不能导入到Access数据库中的是 A) Excel表格B) ForPro创建的表C) Access数据库中的表D) Word文档里的表 (13)某字段中已经有数据,现要改变该字段大小的属性,将该字段大小重新设置为整数型,则以下所存数据会发生变化的是 A) 123 B) 2.5 C) -12 D) 1563 (14)Access中表与表的关系一般定义为 A) 一对多关系B) 多对多关系C) 一对一关系D) 多对一关系 (15)若要在某表中“姓名”字段中查找t:A wh开头的所有人名,则应在查找内容框中输入的字符串是 A) wh? B) wh* C) wh[ ] D) wh# (16)将文本字符串"23,18,9,66"按升序排序,排序的结果将是

数据库表设计

ORI数据库表设计 用户信息 用户表USERINFO 字段类型描述是否允许空UID INT 用户编号,主键自增长否LOGINNAME VARCHAR(12) 登录用户名(长度限制4~12个字符)否 PASSWORD VARCHAR(16) 密码(长度限制8~16个字符)否 USERTYPE INT 用户类型(1个人用户,2企业用户)否 NICKNAME VARCHAR(16) 昵称否 个人用户HUMANUSERINFO 字段类型描述是否允许空HUID INT 主键,自增长否 UID INT USERINFO表外键否REALNAME VARCHAR(8) 用户真实姓名否 EMAIL VARCHAR(50) 邮箱否 TEL VARCHAR(20) 家庭电话是 MOBILE VARCHAR(11) 手机是 ADDRESS VARCHAR(100) 家庭地址是 POSTCODE VARCHAR(6) 邮编是HEADPORTRAITPATH VARCHAR(100) 头像路径是BIRTHDAY VARCHAR(10) 生日是 HOBBY VARCHAR(100) 兴趣爱好是 JOB VARCHAR(100) 工作是TOTALPRICE DOUBLE(10,2) 个人消费总金额是GOLD Int(20) 金币是IDENTITYCARD VARCHAR(18) 身份证是 企业用户ENTERPRISEUSERINFO 字段类型描述是否允许空EUID INT 主键,自增长否 UID INT USERINFO表外键否 NAME VARCHAR(100) 公司名称否 TEL VARCHAR(20) 电话否 EMAIL VARCHAR(50) 邮箱否 ADDRESS VARCHAR(100) 地址否FAX VARCHAR(20) 传真是HEADPORTRAITPATH VARCHAR(100) 头像路径是LICENSE VARCHAR(100) 营业执照复印件否

用MySQL创建数据库和数据库表(新手必看)

用MySQL创建数据库和数据表: 步骤: 1、使用show语句找出在服务器上当前存在什么数据库:mysql>show databases; 2、创建一个数据库test: mysql>create database test; 3、选择你所创建的数据库: mysql>use test; 4创建一个数据表: 首先查看刚才创建的数据库中存在什么表: mysql>show tables; (说明刚才创建的数据库中还没有数据库表)

接着我们创建一个关于students的数据表:包括学生的学号(id),姓名(name),性别(sex),年龄(age)。 mysql>create table students(id int unsigned not null auto_increment primary key,name char(8) not null,sex char(4) not null,age tinyint unsigned not null,); 解释:以"id int unsigned not null auto_increment primary key" 行进行介绍: "id" 为列的名称; "int" 指定该列的类型为int(取值范围为-8388608到8388607), 在后面我们又用"unsigned" 加以修饰, 表示该类型为无符号型, 此时该列的取值范围为0到16777215; "not null" 说明该列的值不能为空, 必须要填, 如果不指定该属性, 默认可为空; "auto_increment" 需在整数列中使用, 其作用是在插入数据时若该列为NULL, MySQL将自动产生一个比现存值更大的唯一标识符值。在每张表中仅能有一个这样的值且所在列必须为索引列。"primary key" 表示该列是表的主键, 本列的值必须唯一, MySQL将自动索引该列。 下面的char(8) 表示存储的字符长度为8, tinyint的取值范围为-127到128, default 属性指定当该列值为空时的默认值。

关系数据库设计

目录 一 Codd的RDBMS12法则——RDBMS的起源 二关系型数据库设计阶段 三设计原则 四命名规则 数据库设计,一个软件项目成功的基石。很多从业人员都认为,数据库设计其实不那么重要。现实中的情景也相当雷同,开发人员的数量是数据库设计人员的数倍。多数人使用数据库中的一部分,所以也会把数据库设计想的如此简单。其实不然,数据库设计也是门学问。 从笔者的经历看来,笔者更赞成在项目早期由开发者进行数据库设计(后期调优需要DBA)。根据笔者的项目经验,一个精通OOP和ORM的开发者,设计的数据库往往更为合理,更能适应需求的变化,如果追其原因,笔者个人猜测是因为数据库的规范化,与OO的部分思想雷同(如内聚)。而DBA,设计的数据库的优势是能将DBMS的能力发挥到极致,能够使用SQL和DBMS实现很多程序实现的逻辑,与开发者相比,DBA优化过的数据库更为高效和稳定。如标题所示,本文旨在分享一名开发者的数据库设计经验,并不涉及复杂的SQL语句或DBMS使用,因此也不会局限到某种DBMS产品上。真切地希望这篇文章对开发者能有所帮助,也希望读者能帮助笔者查漏补缺。 一?Codd的RDBMS12法则——RDBMS的起源 Edgar Frank Codd(埃德加·弗兰克·科德)被誉为“关系数据库之父”,并因为在数据库管理系统的理论和实践方面的杰出贡献于1981年获图灵奖。在1985年,Codd 博士发布了12条规则,这些规则简明的定义出一个关系型数据库的理念,它们被作为所有关系数据库系统的设计指导性方针。 1.信息法则?关系数据库中的所有信息都用唯一的一种方式表示——表中的值。 2.保证访问法则?依靠表名、主键值和列名的组合,保证能访问每个数据项。 3.空值的系统化处理?支持空值(NULL),以系统化的方式处理空值,空值不依赖于数据类型。 4.基于关系模型的动态联机目录?数据库的描述应该是自描述的,在逻辑级别上和普通数据采用同样 的表示方式,即数据库必须含有描述该数据库结构的系统表或者数据库描述信息应该包含在用 户可以访问的表中。 5.统一的数据子语言法则?一个关系数据库系统可以支持几种语言和多种终端使用方式,但必须至少 有一种语言,它的语句能够一某种定义良好的语法表示为字符串,并能全面地支持以下所有规 则:数据定义、视图定义、数据操作、约束、授权以及事务。(这种语言就是SQL) 6.视图更新法则?所有理论上可以更新的视图也可以由系统更新。 7.高级的插入、更新和删除操作?把一个基础关系或派生关系作为单个操作对象处理的能力不仅适应 于数据的检索,还适用于数据的插入、修改个删除,即在插入、修改和删除操作中数据行被视 作集合。 8.数据的物理独立性?不管数据库的数据在存储表示或访问方式上怎么变化,应用程序和终端活动都 保持着逻辑上的不变性。 9.数据的逻辑独立性?当对表做了理论上不会损害信息的改变时,应用程序和终端活动都会保持逻辑 上的不变性。 10.数据完整性的独立性?专用于某个关系型数据库的完整性约束必须可以用关系数据库子语言定 义,而且可以存储在数据目录中,而非程序中。

数据库设计词汇对照表

数据库设计词汇对照表 1. Access method(访问方法):此步骤包括从文件中存储和检索记录。 2. Alias(别名):某属性的另一个名字。在SQL中,可以用别名替换表名。 3. Alternate keys(备用键,ER/关系模型):在实体/表中没有被选为主健的候选键。 4. Anomalies(异常)参见更新异常(update anomalies) 5. Application design(应用程序设计):数据库应用程序生命周期的一个阶段,包括设计用户界面以及使用和处理数据库的应用程序。 6. Attribute(属性)(关系模型):属性是关系中命名的列。 7. Attribute(属性)(ER模型):实体或关系中的一个性质。 8. Attribute inheritance(属性继承):子类成员可以拥有其特有的属性,并且继承那些与超类有关的属性的过程。 9. Base table(基本表):一个命名的表,其记录物理的存储在数据库中。 10. Binary relationship(二元关系):一个ER术语,用于描述两个实体间的关系。例如,panch Has Staff。 11. Bottom-up approach(自底向上方法):用于数据库设计,一种设计方法学,他从标识每个设计组建开始,然后将这些组件聚合成一个大的单元。在数据库设计中,可以从表示属性开始底层设计,然后将这些属性组合在一起构成代表实体和关系的表。 12. Business rules(业务规则):由用户或数据库的管理者指定的附加规则。 13. Candidate key(候选键,ER关系模型):仅包含唯一标识实体所必须得最小数量的属性/列的超键。 14. Cardinality(基数):描述每个参与实体的可能的关系数目。 15. Centralized approach(集中化方法,用于数据库设计):将每个用户试图的需求合并成新数据库应用程序的一个需求集合 16. Chasm trap(深坑陷阱):假设实体间存在一根,但某些实体间不存在通路。 17. Client(客户端):向一个或多个服务器请求服务的软件应用程序。 18. Clustering field(群集字段):记录总的任何用于群集(集合)航记录的非键字段,这些行在这个字段上有相同的值。 19. Clustering index(群集索引):在文件的群集字段上定义的索引。一个文件最多有一个主索引或一个群集索引。 20. Column(列):参加属性(attribute)。 21. Complex relationship(复杂关系):度数大于2的关系。 22. Composite attribute(复合属性):由多个简单组件组成的属性。 23. Composite key(复合键):包含多个列的主健。

数据库常用表

用友数据库常用表 数据库中重要表的讲解 1、.ufysftem库此库是系统参数数据库 其中主要存放各个帐套的共用信息 意义很大 日常应用的也很多。 A ua_account 是帐套信息表 其中系统帐套存放路径、帐套启用年度、帐套启用月份、企业类型、行业性质等字段特别重要。 B ua_account_sub 帐套各模块启用月度及最大结帐月表 其中子系统id 字段、最大结帐月字段、子系统启用日期字段十分重要。 C ua_period 帐套会计日期划分表。 D ua_task 异常任务记录表01(在所有模块退出后 此表应为空) E ua_tasklog 异常任务记录表02 同上 F ua_log 上机日志表 G ua_tonextyear 建立下年年度帐时要建立的表 此表也特别重要 在建立年度帐失败时 一般可从此表记录的内容进行排查 以发现上年度是哪张表有问题 . H、ua_holdauth 记录每个操作员在每个帐套每个年度的分配权限。 2、ufdata_00n_200x库此数据库叫应用数据库 命名规则是ufdata_帐套编号_年度 四位计数 其中主要存放每个年度的帐务数据 包括各个模块的数据。在数据表中 命名方法是模块代码_表名。其中 ap代表应付 ar代表应收;gl代表总帐;wa代表工资 fa代表固定资产;pu代表采购 sa代表销售 st代表库存;ia代表存货 fd代表资金管理;ca代表成本等。 A accinformation 帐套参数表 包括财务和购销存模块设置选项中定义的所有参数 如启用时间、系统年度等等。 B ap_closebill 收付款结算表 主要记录收款单、付款单的内容 C ap_detail 应收应付明细表 主要记录已结算的采购发票和已审核的销售发票所形成的应收应付记录。 D ap_vouch/s 应付/收单主子表 记录销售已审核的代垫费用单 应收、应付单等的表头和表体记录。 E ap_vouchtype 单据类型表 主要记录应收应付系统所使用的各种单据的类型和代码。 F currentstock 现存量表 写入存货的不同自由项、所在仓库到目前为止的结存数量和结存件数。 G customer 客户档案表 写入客户的记录。 H dispatchlist/s 发货单、委托代销结算单主子表 主表写入表头内容 子表写入表体内容。 I Dsign 凭证类别表 定义凭证类别的记录。 J endispatch/s 委托代销发货单主子表。 K gl_accass 辅助总帐表 写入带有辅助核算科目的期初余额以及凭证记帐之后带有辅助核算科目的记录。 L gl_accsum 科目总帐表 写入科目的期初余额和凭证记帐之后科目的增加变化记录。 M gl_accvouch 凭证及明细帐表 写入带有个人往来、供应商往来、客户往来的科目的期初余额及所有模块填制的凭证的明细记录。

关系数据库中

1关系数据库中,主键的正确描述是(D )。 (A) 创建唯一的索引,允许空值(B) 允许有多个主键的 (C) 只允许以表中第一字段建立(D) 为标识表中唯一的实体 2以下不适合创建非聚集索引的情况是(A )。 (A) 表中包含大量重复的列值(B) 带WHERE子句的查询 (C) 经常需要进行联接和分组操作的列(D) 表中包含大量非重复的列值 3使用视图的作用有4个,下列哪一个是错误的(A )。 (A) 导入数据(B) 定制操作 (C) 简化操作(D) 安全性 4叙述A:当视图被撤消,不会对基表造成任何影响。叙述B:不能改变作为计算结果的列。关于对以上叙述中,正确的是(C )。 (A) 叙述A错误,叙述B正确(B) 叙述A正确,叙述B错误 (C) 都正确(D) 都是错误的 5语句:select 10%7 的执行结果是(D )。 (A) 7 (B) 1 (C) 70 (D) 3 6下列关于关联的叙述正确的是( D)。 (A) 已创建关联的两个表中的关联字段数据 可能完全不同(B) 可在两个表的不同数据类型的同名字段 间创建关联 (C) 可在两个表的不同数据类型的字段间创 建关联(D) 可在两个表的相同数据类型的不同名称 的字段间创建关联 7用UNION合并两个SELECT查询的结果时,下列叙述中错误的是()。 (A) 两个SELECT语句必须输出同样的列数(B) 将来自不同查询的数据组合起来 (C) 两个表各相应列的数据类型必须相同(D) 被组合的每个查询都可以使用ORDER B Y子句 8查询所有目前年龄在24岁以上(不含24岁)的学生信息(学号、姓名、年龄),正确的命令是()。 (A) SELECT 学号,姓名,年龄=YEAR(GETDA TE())-YEAR(出生日期) FROM 学生 WHE RE YEAR(GETDATE())-YEAR(出生日 期)>24 (B) SELECT 学号,姓名,YEAR(GETDATE())- YEAR(出生日期) 年龄 FROM 学生 WHE RE YEAR(GETDATE())-YEAR(出生日 期)>24

实验一创建数据库和表

实验一创建数据库和表 1、目的和要求 (1)了解SQL Server数据库的逻辑结构和物理结构。 (2)了解表的结构特点 (3)了解SQL Server的基本数据类型。 2、实验内容 (1)实验题目 ①创建一个新的数据库。创建用于企业管理的员工数据库,数据库名称为YGGL。 ②在创建好的数据库YGGL中创建数据表。考虑到数据库YGGL中包含员工的信息、部分信息以及员工的薪水信息,所以数据库YGGL应该包含三个表:Employees(员工自然信息)表、Departments(部门信息)表和Salary(员工薪水情况)表。 3、实验步骤 (1)在对象资源管理器中创建数据库YGGL。 (2)删除数据库YGGL。 ①界面操作删除数据库 删除数据库YGGL时,右键单击数据库,弹出菜单点击“删除”,弹出“删除对象”窗口,确认删除。 ② T-SQL语句删除数据库 在代码空白处右击鼠标,弹出菜单选择“执行(X)”或者键盘“F5”运行代码,在下方会显示运行成功。 此时在左侧“对象资管理器”中右键点击“数据库”选择刷新数据库,会发现数据库“PX”已经删除。 注意:当执行过一遍代码时,也就是执行了T-SQL语句删除数据库后再次执行代码会出现这样的警告。原因是由于执行过一遍T-SQL语句,进行操作的数据库已经被删除,不存在。 (3)使用T-SQL语句创建数据库YGGL。 新建查询后,在窗口中输入上面代码,右键代码空白处执行。然后在“对象资源管理器”中查看。如果“数据库”列表中并未列出YGGL数据库,则单击右键“数据库”,选择“刷新”选项,“数据库”列表中就会出现创建的YGGL数据库。 (4)在对象资源管理器中创建表。 ①创建表。Employees(员工自然信息)表、Departments(部门信息)表和Salary(员工薪水情况)表。 在对象资源管理器中选择创建的数据库“YGGL”,展开数据库YGGL,选择“表”,右键

关系数据库中的表不必具有的性质是什么

关系数据库中的表不必具有的性质是( ). A. 数据项不可再分 B. 同一列数据项要具有相同的数据类型 C. 记录的顺序可以任意排列 D. 字段的顺序不能任意排列 优质解答D.字段的顺序不能任意排列 1).Access数据库属于(C)数据库。 A)、层次模型 B)、网状模型 C)、关系模型 D)、面向对象模型 2).打开Access数据库时,应打开扩展名为(B)的文件。 A)、mda B)、mdb C)、mde D)、DBF 3).已知某一数据库中有两个数据表,它们的主关键字与主关键字之间是一个对应多个的关系,这两个表若想建立关联,应该建立的永久联系是(B)。 A)、一对一 B)、一对多 C)、多对多

D)、多对一 4).下列(B)不是Access数据库的对象类型? A)、表 B)、向导 C)、窗体 D)、报表 5).关系数据库中的表不必具有的性质是(D)。 A)、数据项不可再分 B)、同一列数据项要具有相同的数据类型 C)、记录的顺序可以任意排列 D)、字段的顺序不能任意排列 6).下列对于Access2000(高版本)与Access97(低版本)之间的说法不正确的是(C)。 A)、通过数据转换技术,可以实现高、低版本的共享. B)、高版本文件在低版本数据库中可以打开,但有些功能不能正常运行. C)、低版本数据库文件无法在高版本数据库中运行. D)、高版本文件在低版本数据库中能使用,需将高版本转换成低版本. 7).不能退出Access 2000的方法是(C)。 A)、单击"文件"菜单/"退出" B)、单击窗口右上角"关闭"按钮

C)、ESC D)、ALT+F4 8).Access在同一时间,可打开(A)个数据库。 A)、1 B)、2 C)、3 D)、4 9).对表中某一字段建立索引时,若其值有重复,可选择(D)索引。 A)、主 B)、有(无重复) C)、无 D)、有(有重复) 10).创建表时可以在(C)中进行。 A)、报表设计器 B)、表浏览器 C)、表设计器 D)、查询设计器 11).不能进行索引的字段类型是(A)。 A)、备注 B)、数值 C)、字符 D)、日期

金碟K3数据库对应表

表名表中文名 t_VoucherGroup 凭证字表 t_VoucherEntry 凭证分录表 t_Voucher 凭证表 t_User 系统用户信息表 t_Userprofile 用户配置文件信息表用户设置错时,删除用户的配置文件 t_UnitGroup 单位类别表 t_SystemProfile 系统参数表 t_Supplier 供应商表 t_SubMesType 辅助资料类别表 t_SubMessage 辅助资料表 t_Stock 仓库表 t_Settle 结算方式表 t_MeasureUnit 计量单位表 t_LogFunction 上机日志标准信息表 t_Log 上机日志信息表 t_ItemRight 基础资料权限表 t_ItemPropDesc 核算项目附表信息描述表 t_ItemClass 基础资料类别表 t_ICItem 物料表 t_Exp 备注资料表 t_Emp 职员表 t_Department 部门表 t_Currency 币别表 t_Account 科目表 t_AccessControl 权限控制表 t_GroupAccess 用户组权限表 t_GroupAccessType 用户组权限类表 t_ObjectAccess 对象权限表 t_ObjectAccessType 对象权限类型表 t_ObjectType 对象类型表 t_Accessory 附件管理表 t_AutoNumber 自动增加表 t_CodeRule 编码规则主表 t_CodeRuleDetail 编码规则明细表 t_CodeRuleValue 编码规则当前值表表 t_CodeTypeFP 编码规则分配表表 t_DataTypeInfo 数据类型定义表 t_dls_moduel 数据灌入模块表 t_dls_TableList 数据灌入中间表 t_dls_TableStruct 数据灌入字段描述表 t_Identity 自动步长编码表 t_Mutex 功能互斥表

数据库中表之间的关系

数据库中表之间的关系 表关系(一对一,一对多,多对多) 收藏 可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的。 在一个关系型数据库中,利用关系可以避免多余的数据。例如,如果设计一个可以跟踪图书信息的数据库,您需要创建一个名为 titles 的表,它用来存储有关每本书的信息,例如书名、出版日期和出版社。您也可能保存有关出版社的信息,诸如出版社的电话、地址和邮政编码。如果您打算在 titles 表中保存所有这些信息,那么对于某出版社出版的每本书都会重复该出版社的电话号码。 更好的方法是将有关出版社的信息在单独的表,publishers,中只保存一次。然后可以在 titles 表中放置一个引用出版社表中某项的指针。 为了确保您的数据同步,可以实施 titles 和 publishers 之间的参照完整性。参照完整性关系可以帮助确保一个表中的信息与另一个表中的信息相匹配。例如,titles 表中的每个书名必须与 publishers 表中的一个特定出版社相关。如果在数据库中没有一个出版社的信息,那么该出版社的书名也不能添加到这个数据库中。 为了更好地理解表关系,请参阅: 定义表关系 实施参照完整性 定义表关系 关系的确立需要通过匹配键列中的数据(通常是两表中同名的列)。在大多数情况下,该关系会将一个表中的主键(它为每行提供了唯一标识)与另一个表的外部键中的某项相匹配。例如,通过创建 titles 表中的 title_id(主键)与 sales 表中的 title_id 列(外部键)之间的关系,则销售额就与售出的特定书名相关联了。 表之间有三种关系。所创建关系的类型取决于相关列是如何定义的。 一对多关系 多对多关系

数据库表结构设计参考

数据库表结构设计参考

表名外部单位表(DeptOut) 列名数据类型(精度范围)空/非空约束条件 外部单位ID 变长字符串(50) N 主键 类型变长字符串(50) N 单位名称变长字符串(255) N 单位简称变长字符串(50) 单位全称变长字符串(255) 交换类型变长字符串(50) N 交换、市机、直送、邮局单位邮编变长字符串(6) 单位标识(英文) 变长字符串(50) 排序号整型(4) 交换号变长字符串(50) 单位领导变长字符串(50) 单位电话变长字符串(50) 所属城市变长字符串(50) 单位地址变长字符串(255) 备注变长字符串(255) 补充说明该表记录数约3000条左右,一般不做修改。初始化记录。 表名外部单位子表(DeptOutSub) 列名数据类型(精度范围)空/非空约束条件 外部子单位ID 变长字符串(50) N 父ID 变长字符串(50) N 外键 单位名称变长字符串(255) N 单位编码变长字符串(50) 补充说明该表记录数一般很少 表名内部单位表(DeptIn) 列名数据类型(精度范围)空/非空约束条件 内部单位ID 变长字符串(50) N 主键 类型变长字符串(50) N 单位名称变长字符串(255) N 单位简称变长字符串(50) 单位全称变长字符串(255) 工作职责 排序号整型(4) 单位领导变长字符串(50) 单位电话(分机)变长字符串(50) 备注变长字符串(255)

补充说明该表记录数较小(100条以内),一般不做修改。维护一次后很少修改 表名内部单位子表(DeptInSub) 列名数据类型(精度范围)空/非空约束条件内部子单位ID 变长字符串(50) N 父ID 变长字符串(50) N 外键 单位名称变长字符串(255) N 单位编码变长字符串(50) 单位类型变长字符串(50) 领导、部门 排序号Int 补充说明该表记录数一般很少 表名省、直辖市表(Province) 列名数据类型(精度范围)空/非空约束条件ID 变长字符串(50) N 名称变长字符串(50) N 外键 投递号变长字符串(255) N 补充说明该表记录数固定 表名急件电话语音记录表(TelCall) 列名数据类型(精度范围)空/非空约束条件ID 变长字符串(50) N 发送部门变长字符串(50) N 接收部门变长字符串(50) N 拨打电话号码变长字符串(50) 拨打内容变长字符串(50) 呼叫次数Int 呼叫时间Datetime 补充说明该表对应功能不完善,最后考虑此表 表名摄像头图像记录表(ScreenShot) 列名数据类型(精度范围)空/非空约束条件ID 变长字符串(50) N 拍照时间Datetime N 取件人所属部门变长字符串(50) N 取件人用户名变长字符串(50) 取件人卡号变长字符串(50) 图片文件BLOB/Image

创建数据库和表

数学与信息技术学院实验报告 实验课程名称:SQL语言基础实验 实验项目名称:实验二创建数据库和表 专业班级: 学号: 姓名: 指导教师:

实验一创建数据库和表 【实验目的】 (1)了解MySQL数据库的存储引擎的分类; (2)了解表的结构特点; (3)了解MySQL的基本数据类型; (4)了解空值概念; (5)学会使用SQL界面工具中创建数据库和表; (6)学会使用SQL语句创建数据库和表。 【实验内容及步骤】 一,实验内容 实验题目 创建用于企业管理的员工管理数据库,数据库名为YGGL,包含员工的信息、部门信息及员工的薪水信息。数据库YGGL包含下列3个表: (1)Employees:员工信息表: (2)Departments:部门信息表: (3)Salary:员工薪水情况表。 二,实验步骤 1,使用命令行为方式创建数据库YGGL 打开MySQL Command Line Client,输入管理员密码登录,使用CREATE语句创建YGGL数据库: Creat database YGGL; 2,使用SQL语句在YGGL数据库中创建表Employees 执行创建表employees的SQL语句:

用同样的方法在数据库YGGL中创建表Salary。 创建一个结构与employees表结构相同的空表Employees(): Creat table Employees0LIKE Employees; 3,使用SQL语句删除表和数据库 删除表employees: Drop table employees; 删除数据库YGGL Drop database YGGL; 4 使用MySQL界面创建数据库YGGL和题目的3个表 连接上MySQL administrator,单机catalogs目录,在下方出现的数据库列表中右击选择“create new schema”,输入yggl完成创建。 创建表以departments为例,在MYAQLAdministrator中选择数据库YGGL,单机“create table”按钮,输入表名“Departments”,输入employees表各字段信息,单机“apply changes”按钮,在弹出的选项框中单击“execute”按钮

数据库定义表之间关系(带图)

如何定义数据库表之间的关系 特别说明 数据库的正规化是关系型数据库理论的基础。随着数据库的正规化工作的完成,数据库中的 各个数据表中的数据关系也就建立起来了。 在设计关系型数据库时,最主要的一部分工作是将数据元素如何分配到各个关系数据表中。一旦完成了对这些数据元素的分类,对于数据的操作将依赖于这些数据表之间的关系,通过这些数据表之间的关系,就可以将这些数据通过某种有意义的方式联系在一起。例如,如果你不知道哪个用户下了订单,那么单独的订单信息是没有任何用处的。但是,你没有必要在同一个数据表中同时存储顾客和订单信息。你可以在两个关系数据表中分别存储顾客信息和订单信息,然后使用两个数据表之间的关系,可以同时查看数据表中每个订单以及其相关的客户信息。如果正规化的数据表是关系型数据库的基础的话,那么这些数据表之间的关系则 是建立这些基础的基石。 出发点 下面的数据将要用在本文的例子中,用他们来说明如何定义数据库表之间的关系。通过Boyce-Codd Normal Form(BCNF)对数据进行正规化后,产生了七个关系表: Books: {Title*, ISBN, Price} Authors: {FirstName*, LastName*} ZIPCodes: {ZIPCode*} Categories: {Category*, Description} Publishers: {Publisher*} States: {State*} Cities: {City*} 现在所需要做的工作就是说明如何在这些表之间建立关系。 关系类型 在家中,你与其他的成员一起存在着许多关系。例如,你和你的母亲是有关系的,你只有一位母亲,但是你母亲可能会有好几个孩子。你和你的兄弟姐妹是有关系的——你可能有很多兄弟和姐妹,同样,他们也有很多兄弟和姐妹。如果你已经结婚了,你和你的配偶都有一个配偶——这是相互的——但是一次只能有一个。在数据表这一级,数据库关系和上面所描述现象中的联系非常相似。有三种不同类型的关系: 一对一:在这种关系中,关系表的每一边都只能存在一个记录。每个数据表中的关键字在对应的关系表中只能存在一个记录或者没有对应的记录。这种关系和一对配偶之间的关系非常相似——要么你已经结婚,你和你的配偶只能有一个配偶,要么你没有结婚没有配偶。大多数的一对一的关系都是某种商业规则约束的结果,而不是按照数据的自然属性来得到的。如果没有这些规则的约束,你通常可以把两个数据表合并进一个数据表,而且不会打破任何规 范化的规则。

用友数据库表及数据字典

用友数据库表及数据字典 数据库模块"表名""表中文名"公 共 表 相关功能 Ufdata财务 分析 CW_CodePlan科目计划初始科目预算 Ufdata 财务 分析 CW_CodePlus科目追加计划科目预算 Ufdata财务 分析 CW_DeptPlan部门计划初始精细部门预算、粗放部门预算 Ufdata 财务 分析 CW_DeptPlus部门追加计划精细部门预算、粗放部门预算 Ufdata 财务 分析 CW_ProfPlan利润计划初始利润预算 Ufdata 财务 分析 CW_ProfPlus利润追加计划利润预算 Ufdata财务 分析 CW_ProjPlan项目计划初始精细项目预算、粗放项目预算 Ufdata 财务 分析 CW_ProjPlus项目追加计划精细项目预算、粗放项目预算 Ufdata 财务 分析 CW_WideDeptCode 粗放部门计划 控制科目 粗放部门预算科目控制方向选择 Ufdata 财务 分析 CW_WideProjCode 粗放项目计划 控制科目 粗放项目预算科目控制方向选择 Ufdata采购 管理 ArrivalVouch(无用表) Ufdata 采购 管理 ArrivalVouchs(无用表) Ufdata采购 管理 PO_Podetails采购订单子表采购订单(子) Ufdata 采购 管理 PO_Pomain采购订单主表采购订单(主) Ufdata 采购 管理 PU_LeftSum(无用表) Ufdata 采购 管理 PurBillVouch采购发票主表采购发票(主) Ufdata 采购 管理 PurBillVouchs采购发票子表采购发票(子) Ufdata 采购 管理 PurSettleVouc h 采购结算单主 表 采购结算(主)

数据库试题

2010年第三学期电子商务专业期未试题 科目:《ACCESS--2003数据库技术及应用》 2010.12 一、填空题(每空0.5分,共10分) 1、对于电话号码这种非计算的类的数据一般为 型 ;年终总结设为 型。 2、为数据库的建立、使用和维护而配置的软件是 系统。 3、根据对操作表操作的不同,查询可以分为 和 。 4、查询设计完成后,有多种方式可以观察查询结果,比如可以进入 视图模式, 或 者单击 按钮。 5、总计查询中必须包含两种字段 和 。 6、交叉表查询的三要素是: 、 、 。 7、将文本型数据:“13”“ 4”“16”“760”降序排列,顺序是 8、打开数据表,可以使用 视图,也可以使用 视图,它们可相互转换。 9、Access 数据库管理系统主要使用 对象显示、输入、编辑数据。 10、表中的OLE 对象型数据,在窗体中使用 控件表示。 11、窗体的数据来源可以是表数据对象,也可以是 数据对象。 12、在创建报表时一般都是先用“自动创建报表”或 创建报表,然后切换 到 视图,对生成的报表进行修改。 一、 判断题:(每小题0.5分,共10分) ( )1、Null 是最小的值。 ( )2、身份证号码不能为数字型。 ( )3、排序可以同时对多个字段进行。 ( )4、输入掩码向导可以用于日期/时间型数据。 ( )5、“设计视图”是创建表最有效的方法。 ( )6、查询结果不能保存,除非使用生成表查询。 ( )7、查询只能对相关联的表进行。 ( )8、字段在库的设计中己定义完成,在查询显示时不能改变其显示名称。 ( )9、查询条件必须预先设计好,在查询过程中不能更改查询条件。 ( )10、查询记录集中显示的字段必须是数据库中己有的字段。 ( )11、窗体中页眉和页脚只能成对添加。 ( )12、当窗体中字段较多时可以选择以连续窗体形式显示。 ( )13、“窗体视图”下不能进行字体字号、颜色的设置。 ( )14、在报表页眉中可以插入图片。 ( )15、可以在报表的“页面设置”命令对话框中设置打印时的纸张的大小。 ( )16、在预览报表时用户可以任意修改数据。 ( )17、在报表页眉中可以插入图片。 ( )18、窗体中可以使用非绑定文本框创建计算控件显示计算结果。 ( )19、页码的位置一般在报表页脚中。 ( )20、身份证号码不能设为数字型。 三、选择题:(每小题1分,共60分) 1、在Access 中,建立的数据库文件的扩展名为( )。 (A )dbt (B )dbf (C )mdf (D )mdb 2、Access 中,建立查询时可以设置筛选条件,应在( )栏中输入筛选条件。 (A )总计 (B )排序 (C )条件 (D )字段 3、属于交互式控件的是( ) (A )标签控件 (B )文本框控件 (C )命令按钮控件 (D )图像控件 4、Access 中通过( )可以对报表的各个部分设置背景颜色。 (A )格式菜单 (B )编辑菜单 (C )插入菜单 (D )属性对话框 5、在Access 的查询中可以使用总计函数,( )就是可以使用的总计函数之一。 (A )Sum (B )And (C )Or (D )+ 6、数据库DB 、数据库系统DBS 、数据库管理系统DBMS 三者之间的关系是( )。 (A )DBS 包含DB 、DBMS (B )DB 包含DBS 、DBMS (C )DBMS 包含DB 、DBS (D )三者互不包含 7、图形对象应该设为( )型。 (A )图片 (B )OLE 对象 (C )备注 (D )视图 8、数据库的核心是( ) (A )数据库 (B )数据库管理员 (C )数据库管理系统 (D )文件 9、Access 中,在数据表中删除一条记录,被删除的记录( )。 密 封 线 _ ____ 学校 班 学号____ _ 姓 南宁市电子工程学校

相关文档