精华内容
下载资源
问答
  • Linux编译安装源代码的三个步骤

    千次阅读 2017-09-14 09:03:07
    Linux编译安装源代码无非就是三个步骤,./configure,make,make install 第一步进入源代码的目录 运行命令 1 ./configure --prefix=安装目录 --target=目标平台 上面这两个是最基本的,有些源代码的安装需要好...

    Linux下编译安装源代码无非就是三个步骤,./configure,make,make install

    第一步进入源代码的目录

    运行命令

    1 ./configure --prefix=安装目录 --target=目标平台

    上面这两个是最基本的,有些源代码的安装需要好几十个参数,具体就只能参考具体的说明了。

    ./configure常见参数解析


    'configure'脚本有大量的命令行选项。对不同的软件包来说,这些选项可能会有变 化,但是许多基本的选项是不会改变的。带上'--help'选项执行'configure'脚本可以看到可用的所有选项。尽管许多选项是很少用到的,但是 当你为了特殊的需求而configure一个包时,知道他们的存在是很有益处的。下面对每一个选项进行简略的介绍:

    --cache-file=FILE

    'configure'会在你的系统上测试存在的特性(或者bug!)。为了加速随后 进行的配置,测试的结果会存储在一个cache file里。当configure一个每个子树里都有'configure'脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助。

    --help

    输出帮助信息。即使是有经验的用户也偶尔需要使用使用'--help'选项,因为一个复杂的项目会包含附加的选项。例如,GCC包里的'configure'脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项。


    --no-create


    'configure'中的一个主要函数会制作输出文件。此选项阻止'configure'生成这个文件。你可以认为这是一种演习(dry run),尽管缓存(cache)仍然被改写了。


    --quiet

    --silent


    当'configure'进行他的测试时,会输出简要的信息来告诉用户正在作什么。这样作是因为'configure'可能会比较慢,没有这种输出的话用户将会被扔在一旁疑惑正在发生什么,使用这两个选项中的任何一个都会把你扔到一旁。(译注:这两句话比较有意思,原文是这样的:If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)


    --version


    打印用来产生'configure'脚本的Autoconf的版本号。


    --prefix=PEWFIX


    '--prefix'是最常用的选项。制作出的'Makefile'会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结构独立部分。举一个例子,当安装一个包,例如说Emacs,下面的命令将会使Emacs Lisp file被安装到"/opt/gnu/share":

    $ ./configure --prefix=/opt/gnu


    --exec-prefix=EPREFIX


    与'--prefix'选项类似,但是他是用来设置结构倚赖的文件的安装位置,编译好的'emacs'二进制文件就是这样一个问件。如果没有设置这个选项的话,默认使用的选项值将被设为和'--prefix'选项值一样。


    --bindir=DIR


    指定二进制文件的安装位置,这里的二进制文件定义为可以被用户直接执行的程序。


    --sbindir=DIR


    指定超级二进制文件的安装位置。这是一些通常只能由超级用户执行的程序。


    --libexecdir=DIR


    指定可执行支持文件的安装位置。与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行。


    --datadir=DIR


    指定通用数据文件的安装位置。


    --sysconfdir=DIR


    指定在单个机器上使用的只读数据的安装位置。


    --sharedstatedir=DIR

    指定可以在多个机器上共享的可写数据的安装位置。


    --localstatedir=DIR

    指定只能单机使用的可写数据的安装位置。

    --libdir=DIR

    指定库文件的安装位置。


    --includedir=DIR

    指定C头文件的安装位置。其他语言如C++的头文件也可以使用此选项。


    --oldincludedir=DIR

    指定为除GCC外编译器安装的C头文件的安装位置。


    --infodir=DIR

    指定Info格式文档的安装位置.Info是被GNU工程所使用的文档格式。


    --mandir=DIR

    指定手册页的安装位置。


    --srcdir=DIR

    这个选项对安装没有作用,他会告诉'configure'源码的位置。一般来说不用指定此选项,因为'configure'脚本一般和源码文件在同一个目录下。


    --program-prefix=PREFIX

    指定将被加到所安装程序的名字上的前缀。例如,使用'--program- prefix=g'来configure一个名为'tar'的程序将会使安装的程序被命名为'gtar'。当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in'文件使用时才会工作。


    --program-suffix=SUFFIX

    指定将被加到所安装程序的名字上的后缀。


    --program-transform-name=PROGRAM

    这里的PROGRAM是一个sed脚本。当一个程序被安装时,他的名字将经过`sed -e PROGRAM'来产生安装的名字。


    --build=BUILD

    指定软件包安装的系统平台。如果没有指定,默认值将是'--host'选项的值。


    --host=HOST

    指定软件运行的系统平台。如果没有指定。将会运行`config.guess'来检测。


    --target=GARGET

    指定软件面向(target to)的系统平台。这主要在程序语言工具如编译器和汇编器上下文中起作用。如果没有指定,默认将使用'--host'选项的值。


    --disable-FEATURE

    一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置。如果默认是提供这些特性,可以使用'--disable-FEATURE'来禁用它,这里'FEATURE'是特性的名字,例如:

    $ ./configure --disable-gui


    -enable-FEATURE[=ARG]

    相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用'--enable-FEATURE'来起用它。这里'FEATURE'是特性的名字。一个特性可能会接受一个可选的参数。例如:

    $ ./configure --enable-buffers=128

    `--enable-FEATURE=no'与上面提到的'--disable-FEATURE'是同义的。


    --with-PACKAGE[=ARG]

    在自由软件社区里,有使用已有软件包和库的优秀传统。当用'configure'来配置一个源码树时,可以提供其他已经安装的软件包的信息。例如,倚赖于Tcl和Tk的BLT器件工具包。要配置BLT,可能需要给'configure'提供一些关于我们把Tcl和Tk装的何处的信息:

    $ ./configure --with-tcl=/usr/local --with-tk=/usr/local

    '--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的。


    --without-PACKAGE

    有时候你可能不想让你的软件包与系统已有的软件包交互。例如,你可能不想让你的新编译器使用GNU ld。通过使用这个选项可以做到这一点:

    $ ./configure --without-gnu-ld


    --x-includes=DIR

    这个选项是'--with-PACKAGE'选项的一个特例。在Autoconf最初被开发出来时,流行使用'configure'来作为Imake的一个变通方法来制作运行于X的软件。'--x-includes'选项提供了向 'configure'脚本指明包含X11头文件的目录的方法。


    --x-libraries=DIR

    类似的,'--x-libraries'选项提供了向'configure'脚本指明包含X11库的目录的方法。

     


     

    make的使用

    一般情况下,只需要直接用make即可,但是有时候,生成的Makefile文件中并没有指定C编译器或者C++编译器,那么就需要手动指定了,不然就有可能出现编译错误。

    make CC=指定C语言编译器

    make CXX=指定C++编译器


     

    最后就简单了

    使用make install即可。

    展开全文
  • 1. 对话框的基本功能:  1) 对话框是一种特殊的窗口,主要用于响应用户的输入,大部分空间都应放在对话框中;  2) 对话框的创建比普通窗口简单的多,可以直接在资源脚本.rc文件中通过脚本定义;  3) 模态对话框和...

    1. 对话框的基本功能:

        1) 对话框是一种特殊的窗口,主要用于响应用户的输入,大部分空间都应放在对话框中;

        2) 对话框的创建比普通窗口简单的多,可以直接在资源脚本.rc文件中通过脚本定义;

        3) 模态对话框和无模态对话框:

             i. 模态对话框其实是应用程序的一种表达,即“如果您不提供我需要的输入的话那你无法做其它任何事”;

             ii. 模态对话框被激活后,对话框的顶层窗口(即它的所属窗口)将一直处于无效状态,除非给对话框提供必要的输入并关闭对话框才行;

             iii. 虽然模态对话框会使父窗口处于无效状态,但是仍然可以切换到其它应用程序的窗口,以至于不会因为未给激活模态对话框的程序提供输入而导致其它程序无法正常使用;

             iv. 无模式对话框则和其它普通窗口差不多了,在对话框被显示时它的所有者也能被激活;

        4) MFC将对话框(模态对话框和非模态对话框)的功能都封装在CDialog类中,这使得对话框的使用变得非常容易;


    2. 创建模态对话框的基本步骤:

        1) 在资源脚本.rc文件中定义对话框的基本模板(包括对话框中的所有控件,对!这些控件也可以使用脚本语句来定义);

        2) 创建一个CDialog对象,并将编译好的对话框资源模板封装在CDialog对象中;

        3) 使用CDialog::DoModal函数来创建模态对话框;

    !!通常对于一些非常简单的对话框可以直接用CDialog创建对象并使用即可,但是对于一些较复杂的对话框(如果你设计的非常复杂的话)则应该从CDialog类中派生一个你自己的类;


    3. 在资源脚本中定义对话框模板:

        1) 首先需要确定定义的资源是对话框:

    IDD_MYDIALOG DIALOG 0, 0, 160, 68
             i. 例子中IDD_MYDIALOG是资源ID,和菜单等资源ID的含义一样,一般约定以IDD作为前缀,即ID Dialog的缩写;

             ii. 关键字DIALOG表示定义的资源是对话框;

             iii. 0, 0表示对话框显示时的默认位置,该位置是以对话框所属窗口的客户区左上角为原点的,但是位置0, 0比较特殊,并不真正代表客户区的左上角,而是默认将模态对话框放在窗口的中心位置;

             iv. 160, 68是对话框的尺寸,即高和宽,这个尺寸当然是用对话框单位表示的;

    !!由于字符的高一般是宽的两倍,所以定义对话框时为了使宽高比协调,一般高是宽的两倍左右;

    !!一般推荐使用对话框单位,因为使用对话框单位不必考虑屏幕分辨率,但是如果是以像素作为单位就需要考虑屏幕分辨率的,这将非常麻烦;

        2) 其次需要确定对话框的样式:

    STYLE DS_MODALFRAME WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU
             i. STYLE关键字表示接下来定义的是对话框的样式;

             ii. 以DS_打头的是对话框特有的风格,即Dialog Style的缩写,以WS_打头的是普通窗口的风格(对话框是一种特殊的窗口);

             iii. WS_POPUP作为对话框是一定要有的(对话框都是以弹出的形式显示在用户眼前的;

             iv. WS_VISIBLE一般都需要包含,这样就不必手工调用ShowWindow来显示对话框了;

             v. WS_CAPTION使对话框具有一个标题,WS_SYSMENU使对话框拥有一个系统菜单;

    !关于对话框的特有样式:

    DS_MODALFRAME:表示的是一个模板对话框(使用Windows预定义的对话框外观样式),原来对对话框的外观有一定的影响,现在没有了;

    DS_CENTER:将对话框放在整个屏幕的中央;

    DS_ABSALIGN:把对话框放在整个屏幕的左上角;

    DS_CONTEXTHELP:在对话框的标题栏中添加一个问号按钮,以便用户可以获得对话框的上下文帮助信息;

    !DS_SYSMODAL:创建一个系统模态对话框,在16位模式下一旦对话框被激活则其它全部窗口(包括其它程序的窗口)都将无效(这表示有严重的系统错误需要处理),但在32位模式下各个应用程序之间被操作系统隔离,因此相对来说是比较安全的,因此在32位模式下,系统模态对话框始终为最顶层窗口,其父窗口(所属的顶层窗口不能激活,和普通的模态对话框一样),但仍然可以激活其它应用程序的窗口(还是和普通模态对话框一样),但是即便激活了其它程序的窗口,但该对话框仍然处于最顶层并挡着其它窗口!!

        3) 然后指定对话框的标题文本(前提是必须包含WS_CAPTION样式):

    CAPTION "Enter Your Name"
    !关键字CAPTION指定后面的字符串将作为对话框的标题;

    !但是仍然可以使用CDialog从CWnd继承来的SetWindowText函数手工设定对话框的标题;

        4) 接着需要指定对话框的字体:该字体将被应用于对话框的所有控件的文本中

    FONT 8, "MS Sans Serif"
             i. FONT表示后面指定的是字体;

             ii. 8表示字体的大小,即8磅的意思;

             iii. 第二个参数就是具体的字体;

    !这里MFC默认所有的对话框字体都是MS Sans Serif,因此该语句多余,但是这里是为了展示字体的定义;

    !同样可以使用控件从CWnd继承来的SetFont来单独修改某个控件的字体;

        5) 最后就是定义对话框中的控件了:

    BEGIN
    	LTEXT			"&Name",		-1,				8, 14, 24, 8
    	EDITTEXT						IDC_NAME,		34, 12, 118, 12,	ES_AUTOSCROLL
    	DEFPUSBUTTON	"OK",			IDOK,			60, 34, 40, 14,		WS_GROUP
    	PUSHBUTTON		"Cancel",		IDCANCEL,		112, 34, 40, 14,	WS_GROUP
    END
             i. 必须将控件的定义都包含在关键字BEGIN和END之间;

             ii. 接下来每行定义一个控件;

             iii. 每行第一个关键字表示控件的类型(静态控件、编辑空间、列表控件等);

             iv. 接下来按照顺序定义控件的各个参数,一般顺序为:控件文本 -> 控件ID -> 控件左上角的位置 -> 控件的尺寸 -> 控件的位置;

    !!有些控件可以不具有文本(如上面的编辑控件EDITTEXT,一般初始时里面没有文本,则可以不加该参数)则可以不加文本这一参数;

    !!静态控件一般作为其它控件的文本说明而不需要具有消息机制,因此其控件ID没有意义,一般定义为-1即可,可以看到上面的LTEXT就是用来说明后面的编辑控件的,因此其ID就设为-1即可;

    !!控件的尺寸和位置都是对话框单位的;

    !!所有控件都具有默认样式,可以不显示定义出来,一般都默认包含WS_CHILD(控件必定是子窗口)、WS_VISIBLE(显示窗口的时候必定也同时显示控件)、WS_TABSTOP(可以利用键盘的TAB键再控件之间来回切换输入焦点);

    !!如果你比较个性,不想具有一些MFC默认的样式,则可以使用NOT运算符来去掉这些样式,比如NOT WS_TABSTOP来去掉TAB切换焦点的功能;

    !!控件文本中的&符号,和定义菜单项文本中的&符号意义相同,只不过它定义的是下一个控件焦点的快捷键,例如上面静态控件文本中的"&Name"将还会使Alt+N称为下一行定义的编辑控件的焦点快捷键(按下Alt+N会把输入焦点切换到编辑控件上);

        6) 罗列部分脚本中可以定义的控件以及其默认的样式:按照控件名关键字、控件类型、默认样式的方式排列

    LTEXT,左对齐静态文本,SS_LEFT|WS_GROUP

    RTEXT,右对齐静态文本,SS_RIGHT|WS_GROUP

    CTEXT,居中对齐静态文本,SS_CENTER|WS_GROUP

    PUSHBUTTON,普通下压按钮,BS_PUSHBUTTON|WS_TABSTOP

    DEFPUSHBUTTON,默认下压按钮(可以使用空格来表示按钮按下),BS_DEFPUSHBUTTON|WS_TABSTOP

    EDITTEXT,编辑控件,ES_LEFT|WS_BORDER|WS_TABSTOP(可以见得编辑控件是左对齐的)

    CHECKBOX,复选框,BS_CHECKBOX|WS_TABSTOP

    AUTOCHECKBOX,自动复选框,BS_AUTOCHECKBOX|WS_TABSTOP

    ...

    !!可以见得控件的定义实际上是通过控件样式来决定控件的类型的;

    !!!所以,也可以通过一般的CONTROL来定义任意控件;

        7) 通过关键字CONTROL来定义任意控件:

    CONTROL		"OK",		IDOK,		"BUTTON",		BS_DEFPUSHBUTTON|WS_TABSTOP|WS_GROUP,		60, 34, 40, 14
             i. CONTROL关键字表示接下来定义的是一个一般类型的控件;

             ii. 各参数的约定的顺序是:控件文本 -> 控件ID -> 控件窗口注册时的类名,即WNDCLASS名字 -> 控件的样式 -> 位置 -> 尺寸

             iii. 对于WNDCLASS名字,BUTTON代表下压按钮、单选框、复选框和组框,EDIT代表编辑控件等;

             iv. CONTROL一般用于自定义的控件,而此时WNDCLASS类名则为自己设计的类的类名(用RegisterClass注册过的);

             v. 这种方式定义控件相对来说较为原始,样式里只有WS_CHILD和WS_VISIBLE是默认的,可以不显示写出来,其余的包括WS_TABSTOP在内的样式都需要显式添加;

    !!!CONTROL定义法最常用于定义高级通用控件,例如进度条、微调按钮等,都必须使用CONTROL来定义!


    4. 对话框的键盘接口总结:

        1) 总共有4个因素会影响对话框的键盘接口,后面将一一罗列;

        2) 控件定义的顺序:

             i. 控件在模板中定义的顺序主要影响了Tab键和Shfit-Tab键切换控件输入焦点时的顺序;

             ii. 要使用Tab和Shift-Tab切换焦点,控件必须包含WS_TABSTOP样式;

             iii. Tab切换焦点的顺序就是控件在模板中定义的顺序;

        3) 控件正文使用“&”来指定快捷键:

             i. 可以通过Alt+(*)的方式将焦点自动移到指定的控件上;

             ii. 如果焦点已经停留在相同类型的控件上的话,则直接按&修饰的字母键即可将焦点移到指定的控件上了,比如,一个PUSHBUTTON的正文定义为"&OK",另一个为"&Cancel",还有一个为"Haha",如果此时焦点已经停在了Cancel或者Haha上,则只需要按下O键就能将焦点移到OK按钮上了,而不需要Alt+O来移动焦点;

    !前提是焦点停留在相同类型的控件上才行,诸如上例三个控件都是下压按钮;

    !如果一个控件没有正文文本(例如上例的编辑框),则为了给这样的控件加快捷键,则可以在其前面定义一个静态文本控件,并给该文本添加快捷键标记&;

        4) 使用WS_GROUP样式来集成控件:

             i. 用WS_GROUP集成的一组控件之间可以用上下左右箭头来相互切换焦点;

             ii. 对于WS_GOURP集成之外的各个控件组之间只能用Tab键来相互切换焦点而不能用箭头来切换焦点;

             iii. WS_GROUP专门用于给复选框和单选框分组,但是在对话框中也常将一个单独的按钮分为一组,这样就可以禁止在各单独按钮之间用方向键来切换焦点而只能使用Tab键来切换焦点,这样使逻辑上更加清晰;

        5) 默认按钮:

             i. 即用DEFPUSHBUTTON或用BS_DEFPUSHBUTTON定义的按钮;

             ii. 这些按钮在对话框刚显示时就会在设定为默认按钮的外围加一层虚线,按下Enter键可以模拟鼠标点击该按钮;

             iii. 当然也可以用Tab键、方向键等在若干个按钮之间切换默认按钮,视觉上表现为虚线框随着Tab和方向键移动到其它按钮上,这样默认按钮也会随之改变;

    展开全文
  • 类的定义定义类的步骤

    千次阅读 多人点赞 2018-07-24 09:08:27
    类:具有相同属性和方法...1.定义类:(1),定义类  (2),编写属性  (3),编写方法 [访问修饰符] class 类名 { //省略类的内部具体代码 } 2.属性:对象的特征(名词) [访问修饰符] 数据类型 属性名 ...

    类:具有相同属性和方法的一组对象的集合。

          类是对象的抽象,对象是类的具体。

    万物皆对象:

    1.定义类:(1),定义类

                      (2),编写属性

                       (3),编写方法

    
    [访问修饰符]  class 类名 {
    //省略类的内部具体代码
    }

    2.属性:对象的特征(名词)

    [访问修饰符]  数据类型  属性名

    3.方法:对象的行为(动词)。

         对象:有一组属性和方法构成的一个实体。

    [访问修饰符]  返回类型  方法名称(参数类型  参数名1 参数名2 参数名3 .....){
    
    //省略方法体代码
    
    }
    person pujing=new person();
    pujing.name="普京";

    对象shu租的数据类型就是具体的类名。对象数组存储的就是这个类的对象,每个数组元素都是一个对象。


    public class Ren{
    String name;
    int age;
    public String showInfo(){
    String info="我叫“+name+";"+age+"岁;性别"+sex;
    return info;
    }
    }

    注:

    1.类名首字母大写;

    2.方法名命名需要驼峰命名规则

    3."方法"后面都有();

    4.1 有返回值,用return返回一个值

    4.2无返回值,创建方法的时候用void,不用return,而是用System.out.print()

       

    展开全文
  • 数据库设计的基本步骤

    万次阅读 多人点赞 2017-08-13 20:52:16
    数据库设计的基本步骤 按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6阶段 1.需求分析 2.概念结构设计 3.逻辑结构设计 4.物理结构设计 5.数据库实施 6.数据库的运行和维护   在...

    数据库设计的基本步骤

    按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段

    1.需求分析

    2.概念结构设计

    3.逻辑结构设计

    4.物理结构设计

    5.数据库实施

    6.数据库的运行和维护

     

    数据库设计通常分为6个阶段1(需求分析:分析用户的需求,包括数据、功能和性能需求;2概念结构设计:主要采用E-R模型进行设计,包括画E-R图;3逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换;4数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径;5数据库的实施:包括编程、测试和试运行;6数据库运行与维护:系统的运行与数据库的日常维护。),主要讨论其中的第3个阶段,即逻辑设计


    在数据库设计过程中,需求分析和概念设计可以独立于任何数据库管理系统进行,逻辑设计和物理设计与选用的DAMS密切相关。

     

    1.需求分析阶段(常用自顶向下)

          进行数据库设计首先必须准确了解和分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,也是最困难,最耗时的一步。需求分析是否做得充分和准确,决定了在其上构建数据库大厦的速度与质量。需求分析做的不好,会导致整个数据库设计返工重做。

          需求分析的任务,是通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求,然后在此基础上确定新的系统功能,新系统还得充分考虑今后可能的扩充与改变,不仅仅能够按当前应用需求来设计。

         调查的重点是,数据与处理。达到信息要求,处理要求,安全性和完整性要求。

         分析方法常用SA(Structured  Analysis) 结构化分析方法,SA方法从最上层的系统组织结构入手,采用自顶向下,逐层分解的方式分析系统。

          数据流图表达了数据和处理过程的关系,在SA方法中,处理过程的处理逻辑常常借助判定表或判定树来描述。在处理功能逐步分解的同事,系统中的数据也逐级分解,形成若干层次的数据流图。系统中的数据则借助数据字典(data dictionary,DD)来描述。数据字典是系统中各类数据描述的集合,数据字典通常包括数据项,数据结构,数据流,数据存储,和处理过程5个阶段。

     

    2.概念结构设计阶段(常用自底向上)

           概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象,形成了一个独立于具体DBMS的概念模型。

          设计概念结构通常有四类方法:

    • 自顶向下。即首先定义全局概念结构的框架,再逐步细化。
    • 自底向上。即首先定义各局部应用的概念结构,然后再将他们集成起来,得到全局概念结构。
    • 逐步扩张。首先定义最重要的核心概念结构,然后向外扩张,以滚雪球的方式逐步生成其他的概念结构,直至总体概念结构。
    • 混合策略。即自顶向下和自底向上相结合。

     

    3.逻辑结构设计阶段(E-R图

          逻辑结构设计是将概念结构转换为某个DBMS所支持的数据模型,并将进行优化。

           在这阶段,E-R图显得异常重要。大家要学会各个实体定义的属性来画出总体的E-R图。

           各分E-R图之间的冲突主要有三类:属性冲突,命名冲突,和结构冲突。

           E-R图向关系模型的转换,要解决的问题是如何将实体性和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。

     

    4.物理设计阶段

           物理设计是为逻辑数据结构模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。

           首先要对运行的事务详细分析,获得选择物理数据库设计所需要的参数,其次,要充分了解所用的RDBMS的内部特征,特别是系统提供的存取方法和存储结构。

            常用的存取方法有三类:1.索引方法,目前主要是B+树索引方法。2.聚簇方法(Clustering)方法。3.是HASH方法。

     

    5.数据库实施阶段

          数据库实施阶段,设计人员运营DBMS提供的数据库语言(如sql)及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制和调试应用程序,组织数据入库,并进行试运行。

     

    6.数据库运行和维护阶段

           数据库应用系统经过试运行后,即可投入正式运行,在数据库系统运行过程中必须不断地对其进行评价,调整,修改。


    数据库设计5步骤
    Five Steps to design the Database

     

     

    1.确定entities及relationships

    a)    明确宏观行为。数据库是用来做什么的?比如,管理雇员的信息。

    b)    确定entities。对于一系列的行为,确定所管理信息所涉及到的主题范围。这将变成table。比如,雇用员工,指定具体部门,确定技能等级。

    c)    确定relationships。分析行为,确定tables之间有何种关系。比如,部门与雇员之间存在一种关系。给这种关系命名。

    d)    细化行为。从宏观行为开始,现在仔细检查这些行为,看有哪些行为能转为微观行为。比如,管理雇员的信息可细化为:

    ·         增加新员工

    ·         修改存在员工信息

    ·         删除调走的员工

    e)    确定业务规则。分析业务规则,确定你要采取哪种。比如,可能有这样一种规则,一个部门有且只能有一个部门领导。这些规则将被设计到数据库的结构中。

     

    ====================================================================
    范例:
    ACME是一个小公司,在5个地方都设有办事处。当前,有75名员工。公司准备快速扩大规模,划分了9个部门,每个部门都有其领导。
    为有助于寻求新的员工,人事部门规划了68种技能,为将来人事管理作好准备。员工被招进时,每一种技能的专业等级都被确定。


    定义宏观行为
    一些ACME公司的宏观行为包括:
    招聘员工
    解雇员工
    管理员工个人信息
    管理公司所需的技能信息
    管理哪位员工有哪些技能
    管理部门信息
    管理办事处信息
    确定entities及relationships
    我们可以确定要存放信息的主题领域(表)及其关系,并创建一个基于宏观行为及描述的图表。
    我们用方框来代表table,用菱形代表relationship。我们可以确定哪些relationship是一对多,一对一,及多对多。
    这是一个E-R草图,以后会细化。

     


    细化宏观行为
    以下微观行为基于上面宏观行为而形成:
    增加或删除一个员工
    增加或删除一个办事处
    列出一个部门中的所有员工
    增加一项技能
    增加一个员工的一项技能
    确定一个员工的技能
    确定一个员工每项技能的等级
    确定所有拥有相同等级的某项技能的员工
    修改员工的技能等级

    这些微观行为可用来确定需要哪些table或relationship。

    确定业务规则
    业务规则常用于确定一对多,一对一,及多对多关系。
    相关的业务规则可能有:
    现在有5个办事处;最多允许扩展到10个。
    员工可以改变部门或办事处
    每个部门有一个部门领导
    每个办事处至多有3个电话号码
    每个电话号码有一个或多个扩展
    员工被招进时,每一种技能的专业等级都被确定。
    每位员工拥有3到20个技能
    某位员工可能被安排在一个办事处,也可能不安排办事处。

    2.确定所需数据

    要确定所需数据:

    a)    确定支持数据

    b)    列出所要跟踪的所有数据。描述table(主题)的数据回答这些问题:谁,什么,哪里,何时,以及为什么

    c)    为每个table建立数据

    d)    列出每个table目前看起来合适的可用数据

    e)    为每个relationship设置数据

    f)    如果有,为每个relationship列出适用的数据

     

    确定支持数据

    你所确定的支持数据将会成为table中的字段名。比如,下列数据将适用于表Employee,表Skill,表Expert In。

     

    Employee

    Skill

    Expert In

    ID

    ID

    Level

    Last Name

    Name

    Date acquired

    First Name

    Description

     

    Department

     

     

    Office

     

     

    Address

     

     


    如果将这些数据画成图表,就像:

     


    需要注意:
    在确定支持数据时,请一定要参考你之前所确定的宏观行为,以清楚如何利用这些数据。
    比如,如果你知道你需要所有员工的按姓氏排序的列表,确保你将支持数据分解为名字与姓氏,这比简单地提供一个名字会更好。
    你所选择的名称最好保持一致性。这将更易于维护数据库,也更易于阅读所输出的报表。
    比如,如果你在某些地方用了一个缩写名称Emp_status,你就不应该在另外一个地方使用全名(Empolyee_ID)。相反,这些名称应当是Emp_status及Emp_id。
    数据是否与正确的table相对应无关紧要,你可以根据自己的喜好来定。在下节中,你会通过测试对此作出判断。

    3.标准化数据

    标准化是你用以消除数据冗余及确保数据与正确的table或relationship相关联的一系列测试。共有5个测试。本节中,我们将讨论经常使用的3个。
    关于标准化测试的更多信息,请参考有关数据库设计的书籍。

    标准化格式
    标准化格式是标准化数据的常用测试方式。你的数据通过第一遍测试后,就被认为是达到第一标准化格式;通过第二遍测试,达到第二标准化格式;通过第三遍测试,达到第三标准化格式。

    如何标准格式:
    1 列出数据
    2 为每个表确定至少一个键。每个表必须有一个主键。
    3 确定relationships的键。relationships的键是连接两个表的键。
    4 检查支持数据列表中的计算数据。计算数据通常不保存在数据库中。
    5 将数据放在第一遍的标准化格式中:
    6 从tables及relationships除去重复的数据。
    7 以你所除去数据创建一个或更多的tables及relationships。
    8 将数据放在第二遍的标准化格式中:
    9 用多于一个以上的键确定tables及relationships。
    10 除去只依赖于键一部分的数据。
    11 以你所除去数据创建一个或更多的tables及relationships。
    12 将数据放在第三遍的标准化格式中:
    13 除去那些依赖于tables或relationships中其他数据,并且不是键的数据。
    14 以你所除去数据创建一个或更多的tables及relationships。

    数据与键
    在你开始标准化(测试数据)前,简单地列出数据,并为每张表确定一个唯一的主键。这个键可以由一个字段或几个字段(连锁键)组成。

    主键是一张表中唯一区分各行的一组字段。Employee表的主键是Employee ID字段。Works In relationship中的主键包括Office Code及Employee ID字段。给数据库中每一relationship给出一个键,从其所连接的每一个table中抽取其键产生。

    RelationShip

    Key

    Office

    *Office code

     

    Office address

     

    Phone number

    Works in

    *Office code

     

    *Employee ID

    Department

    *Department ID

     

    Department name

    Heads

    *Department ID

     

    *Employee ID

    Assoc with

    *Department ID

     

    *EmployeeID

    Skill

    *Skill ID

     

    Skill name

     

    Skill description

    Expert In

    *Skill ID

     

    *Employee ID

     

    Skill level

     

    Date acquired

    Employee

    *Employee ID

     

    Last Name

     

    First Name

     

    Social security number

     

    Employee street

     

    Employee city

     

    Employee state

     

    Employee phone

     

    Date of birth


    将数据放在第一遍的标准化格式中
    除去重复的组
    要测试第一遍标准化格式,除去重复的组,并将它们放进他们各自的一张表中。
    在下面的例子中,Phone Number可以重复。(一个工作人员可以有多于一个的电话号码。)将重复的组除去,创建一个名为Telephone的新表。在Telephone与Office创建一个名为Associated With的relationship。

    将数据放在第二遍的标准化格式中
    除去那些不依赖于整个键的数据。
    只看那些有一个以上键的tables及relationships。要测试第二遍标准化格式,除去那些不依赖于整个键的任何数据(组成键的所有字段)。
    在此例中,原Employee表有一个由两个字段组成的键。一些数据不依赖于整个键;例如,department name只依赖于其中一个键(Department ID)。因此,Department ID,其他Employee数据并不依赖于它,应移至一个名为Department的新表中,并为Employee及Department建立一个名为Assigned To的relationship。


    将数据放在第三遍的标准化格式中
    除去那些不直接依赖于键的数据。
    要测试第三遍标准化格式,除去那些不是直接依赖于键,而是依赖于其他数据的数据。
    在此例中,原Employee表有依赖于其键(Employee ID)的数据。然而,office location及office phone依赖于其他字段,即Office Code。它们不直接依赖于Employee ID键。将这组数据,包括Office Code,移至一个名为Office的新表中,并为Employee及Office建立一个名为Works In的relationship。

     

    4.考量关系

    当你完成标准化进程后,你的设计已经差不多完成了。你所需要做的,就是考量关系。

    考量带有数据的关系
    你的一些relationship可能集含有数据。这经常发生在多对多的关系中。

    遇到这种情况,将relationship转化为一个table。relationship的键依旧成为table中的键。

    考量没有数据的关系
    要实现没有数据的关系,你需要定义外部键。外部键是含有另外一个表中主键的一个或多个字段。外部键使你能同时连接多表数据。

    有一些基本原则能帮助你决定将这些键放在哪里:

    一对多 在一对多关系中,“一”中的主键放在“多”中。此例中,外部键放在Employee表中。

    一对一 在一对一关系中,外部键可以放进任一表中。如果必须要放在某一边,而不能放在另一边,应该放在必须的一边。此例中,外部键(Head ID)在Department表中,因为这是必需的。

    多对多 在多对多关系中,用两个外部键来创建一个新表。已存的旧表通过这个新表来发生联系。

     

    5.检验设计

    在你完成设计之前,你需要确保它满足你的需要。检查你在一开始时所定义的行为,确认你可以获取行为所需要的所有数据:
    你能找到一个路径来等到你所需要的所有信息吗?
    设计是否满足了你的需要?
    所有需要的数据都可用吗?
    如果你对以上的问题都回答是,你已经差不多完成设计了。

    最终设计
    最终设计看起来就像这样:

    设计数据库的表属性
    数据库设计需要确定有什么表,每张表有什么字段。此节讨论如何指定各字段的属性。

    对于每一字段,你必须决定字段名,数据类型及大小,是否允许NULL值,以及你是否希望数据库限制字段中所允许的值。

    选择字段名
    字段名可以是字母、数字或符号的任意组合。然而,如果字段名包括了字母、数字或下划线、或并不以字母打头,或者它是个关键字(详见关键字表),那么当使用字段名称时,必须用双引号括起来。

    为字段选择数据类型
    SQL Anywhere支持的数据类型包括:
    整数(int, integer, smallint)
    小数(decimal, numeric)
    浮点数(float, double)
    字符型(char, varchar, long varchar)
    二进制数据类型(binary, long binary)
    日期/时间类型(date, time, timestamp)
    用户自定义类型

    关于数据类型的内容,请参见“SQL Anywhere数据类型”一节。字段的数据类型影响字段的最大尺寸。例如,如果你指定SMALLINT,此字段可以容纳32,767的整数。INTEGER可以容纳2,147,483,647的整数。对CHAR来讲,字段的最大值必须指定。

    长二进制的数据类型可用来在数据库中保存例如图像(如位图)或者文字编辑文档。这些类型的信息通常被称为二进制大型对象,或者BLOBS。

    关于每一数据类型的完整描述,见“SQL Anywhere数据类型”。

    NULLNOT NULL

    如果一个字段值是必填的,你就将此字段定义为NOT NULL。否则,字段值可以为NULL值,即可以有空值。SQL中的默认值是允许空值;你应该显示地将字段定义为NOT NULL,除非你有好理由将其设为允许空值。

    关于NULL值的完整描述,请见“NULL value”。有关其对比用法,见“Search conditions”。

    选择约束

    尽管字段的数据类型限制了能存在字段中的数据(例如,只能存数字或日期),你或许希望更进一步来约束其允许值。

    你可以通过指定一个“CHECK”约束来限制任意字段的值。你可以使用能在WHERE子句中出现的任何有效条件来约束被允许的值,尽管大多数CHECK约束使用BETWEEN或IN条件。

    更多信息

    有关有效条件的更多信息,见“Search conditions”。有关如何为表及字段指定约束,见“Ensuring Data Integrity”。
    ====================================================================
    范例
    例子数据库中有一个名为department的表,字段是dept_id, dept_name, dept_head_id。其定义如下:

    Fields

    Type

    Size

    Null/Not Null

    Constraint

    Dept_id

    Integer

    --

    Not null

    None

    Dept_name

    Char

    40

    Not null

    None

    Dept_head_id

    Integer

    --

    Not null

    None


    注意每一字段都被指定为“not null”。这种情况下,表中每一记录的所有字段的数据都必填。

    选择主键及外部键
    主键是唯一识别表中每一项记录的字段。如何你的表已经正确标准化,主键应当成为数据库设计的一部分。
    外部键是包含另一表中主键值的一个或一组字段。外部键关系在数据库中建立了一对一及一对多关系。如果你的设计已经正确标准化,外部键应当成为数据库设计的一部分。

    展开全文
  • 数据库设计基本步骤

    千次阅读 2018-06-25 19:31:33
    数据库设计的基本步骤按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6阶段1.需求分析2.概念结构设计3.逻辑结构设计4.物理结构设计5.数据库实施6.数据库的运行和维护 在数据库设计...
  • 动态规划基本步骤

    千次阅读 2018-03-02 20:14:13
    动态规划算法依赖于两性质:1,最优子结构:问题的最优解是由最优子问题的最优解推出的,也就是问题的最优解包含了子问题的最优解2,重叠子问题:在用递归算法自顶向解问题时,每次产生的子问题并不是总是新问题...
  • 使用JDBC的基本步骤

    万次阅读 2017-03-19 22:24:49
    首先,需要知道使用Java开发任何数据库...访问数据库的Java程序主要有5个步骤,分别是: 1)加载驱动程序。 2)建立连接。 3)创建语句。 4)执行语句。 5)处理ResultSet。 那么就简单说明这5个步骤如何实现: 1)
  • C语言程序设计基本步骤

    千次阅读 2007-05-25 22:33:00
    一、Turbo C程序设计基本步骤程序设计方法包括三个基本步骤:第一步: 分析问题。第二步: 画出程序的基本轮廓。第三步: 实现该程序。3a. 编写程序3b. 测试和调试程序3c. 提供数据打印结果下面, 我们来说明每一步的具体...
  • 阿里云ECS专有网络产品三个步骤配置教程  阿里云专有网络节点已开通地域:美国硅谷可用区1B,新加坡可用区A,北京可用区A,深圳可用区A,杭州可用区D,上海可用区B  举个栗子:购买 美国硅谷可用区1B ECS ...
  • 文章目录1.序2.动态规划的基本概念[^1]3.动态规划算法的基本思想[^2]4....这篇文章主要介绍动态规划算法的基本思想、使用动态规划算法求解问题的基本步骤、动态规划算法的两个基本要素以及一些经典的动态规划问题。...
  • 搭建神经网络的基本步骤

    千次阅读 2019-03-08 22:14:14
    1 搭建神经网络的步骤 搭建神经网络,可分为四步完成:准备工作、前向传播、反向传播、循环迭代 1-0 准备工作 导入模块,生成数据集 import 常量定义 生成数据集 1-1 前向传播 定义输入、输出和参数 x =...
  • NetBeans GUI编程基本步骤

    万次阅读 多人点赞 2015-10-07 21:08:35
    2. 重新定义类名-窗体类LoginFrame   单击[完成]后将打开设计视图     代码视图   二、NetBeans设计图形用户界面的步骤2  1.设置窗体属性  选中窗体 | 在属性面板中设置窗体的各属性值  ...
  • JDBC操作数据库的基本步骤

    万次阅读 多人点赞 2016-05-09 17:52:07
    JDBC操作数据库的基本步骤:  1)加载(注册)数据库驱动(到JVM)。  2)建立(获取)数据库连接。  3)创建(获取)数据库操作对象。  4)定义操作的SQL语句。  5)执行数据库操作。  6)获取并操作...
  • JDBC编程的基本步骤

    千次阅读 2013-06-19 10:56:41
    具体步骤如下: ›第一步:向驱动程序管理器加载、注册JDBC驱动程序。 ›第二步:获得特定 的数据库连接。 ›第步:得到SQL语句容器,并发送SQL语句。 ›第四步:如果SQL语言有结果集返回的话,处理结果集。 ...
  • 思科层交换机配置步骤

    千次阅读 2020-04-08 13:34:09
    思科层交换机配置图如下: 配置的过程如下: 首先,设置各个PC的ip地址,子网掩码,网关 ...可在全局模式 vlan database vlan 10 name vlan10 进行设置不同的vlan 第二步,给vlan分配接口 可通关...
  • JDBC 访问数据库的基本步骤

    千次阅读 2012-02-28 21:57:06
    在Java程序中通过JDBC操作数据库一般分为以下几个步骤: (以下只拿Oracle,MSSQL,MySQL三个数据库作为例子) (1)加载JDBC驱动: 将数据库的JDBC驱动加载到classpath中,在基于JavaEE的Web应用实际开发过程中,通常要把...
  • DAC的基本定义 Digital-to-Analog Converter的缩写。指数/模转换器或者数字/模拟转换器。是指将离散的数字信号转换为连续变量的模拟信号的器件。 典型的数字模拟转换器将表示一定比例电压值的数字信号转换为模拟...
  • 算法的三个基本问题

    千次阅读 2006-05-16 23:29:00
    2) 有效,即每一个步骤都切实可行;3) 有限,即可在有限步骤后得到结果。大多数情况,解决一个问题可以使用几个不同的算法,在编写最终程序之前需要考虑许多潜在的解决方案。2.算法和函数有什么样关系?算法本身...
  • 华三AC基本调试步骤

    千次阅读 2017-11-23 14:23:00
    部分构成: 1、WAI是无线局域网鉴别基础结构的简称,是用于无线局域网中身份鉴别和密钥管理的安全方案 2、WPI是无线局域网保密基础结构的简称,是用于无线局域网中数据传输保护的安全方案(包括数据加密、数据...
  • 定义三个模块,使用<import>标签完成分模块配置开发,模拟实现学生借书和还书的过程,将结束输出到控制台。 要求如下: 定义学生管理模块、书籍管理模块和借还书管理模块。 使用<import>标签完成分...
  • mpvue使用vuex基本步骤以及如何使用

    千次阅读 2018-10-23 11:28:12
    例如:在store.js里面创建一状态,定义NUM为521,STR为姚辉乾的字符串。 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); const store = new Vuex.Store({ state: { str:'姚辉乾', num...
  • C语言实现子棋(具体步骤和代码)

    万次阅读 多人点赞 2020-11-01 14:19:27
    子棋一、问题描述二、基本流程步骤1.菜单界面2.创建棋盘3.棋盘初始化4.打印棋盘(1)简陋方法:(2)美观方法:5.玩家落子6.电脑落子7.判断胜负四、结果演示1.玩家胜利2.电脑胜利3.和棋五、代码实现 一、问题描述 ...
  •  使用对象的好处:我们可以定义对象,并分别设置它们,执行一状态时,可绑定需要的对象,当状态改变需要绘制一或多模型时,只需要将其绑定到目标状态中即可,不要在重复设置选项了。   原博主博客...
  • Ajax请求的五个步骤

    万次阅读 多人点赞 2020-06-02 14:01:22
    Ajax请求的五个步骤 一、定义 1、什么是Ajax Ajax:即异步 JavaScript 和XML。Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新...
  • 其中,像素是数字图像的基本单元。而一幅模拟图像如果想要变成一幅数字图像,就需要经过数字化才能得到,数字化包括两过程:采样和量化。 采样是把空间上的连续的图像分割成离散的像素的集合,采样的间隔越小...
  • 创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String ...
  • 数据定义

    千次阅读 2018-04-06 23:27:18
    关系数据库系统支持级模式结构,其模式、外模式和内模式的基本对象有模式、表、视图和索引等。SQL数据定义功能包括模式的定义、表定义、视图定义和索引的定义。 SQL的数据定义语句如下表 一、模式的定义和...
  • 动态规划所处理的问题是一...动态规划算法基本求解步骤:  (1)划分阶段:按照问题的时间或空间特征,把问题分为若干阶段。在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,否则问题就无法求解。 ...
  • JDBC连接数据库6个步骤

    万次阅读 多人点赞 2018-11-01 09:46:27
    JDBC连接数据库,创建一个以JDBC连接数据库的程序,包含7个步骤:  首先准备JDBC所需的四个参数(user,password,url,driverClass) (1)user用户名 (2)password密码 (3)URL定义了连接数据库时的协议、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 840,964
精华内容 336,385
关键字:

下定义三个基本步骤