元始天尊 发表于 2014-7-18 00:42:10

数据库笔记1

这2天开始攻数据库,现在看的是东南大学数据库视频,核心原理摘抄如下:

数据库产生原因:
    涉及的数据量大
    数据不随程序结束而消失
    数据为多个应用程序所共享

数据库发展阶段:
    人工管理
    文件系统管理

文件管理系统缺点:
    编写应用程序不方便:必须对文件的逻辑及物理结构了解,使用文件打开关闭读写等功能而不能直接向文件查询
    文件的设计难于满足多种应用程序的要求,数据冗余度大
    文件结构的修改导致应用程序的修改:文件系统数据和程序的独立性不好
    文件系统不支持对文件的并发访问
    数据缺少统一管理,在格式、编码、表示命名、安全保密难于规范化
   
数据库系统构成:
    数据库DB:以一定组织形式汇集到磁盘介质上的数据
    数据库管理系统DBMS:管理数据库软件
    数据库管理员DBA:进行数据库规划,设计协调、维护管理人员
    数据库系统:应用程序、数据库管理系统、数据库和数据库管理员的总称

数据库系统功能:
    提供高级用户接口
    查询处理和优化
    数据目录管理
    并发控制
    恢复功能
    完整性约束检查
    访问控制

层次数据结构:
    树形结构只有一个双亲
    实体之间的联系单一
    树形结构在计算机中表示方便

    非层次的多元关系带来数据冗余
    数据库语言和数据的独立性比较差
    信息模型的转换有一定的难度

计算机世界三大模型:
    网状模型
    层次模型
    关系模型

传统数据模型优缺点:
    在记录基础上定义各自基本结构,约束和操作
    向用户提供了一种统一的数据模型和语言
   
    以记录为基础,不能很好地面向用户
      现实世界事务的概念为实体不是记录
      记录的划分从系统实现考虑
      使用缺乏简单方便性
    不能以自然的方式描述实体之间的联系
      描述的联系是在数据库中的实现
    语义贫乏
      记录中各个属性联系作用不明确
      对实体间联系不自然
    数据类型少
      只有简单的数据类型
      不允许用户定义新数据类型

描述应用的限制:
    非事务处理
    过早与DBMS相联系
    提高抽象级别和表达能力

元始天尊 发表于 2014-7-18 23:49:13

多项式合并:

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdio.h>
#include <malloc.h>

struct ElemType
{
        ElemType* next;
        float coef;//系数
        int expn;//指数
};

ElemType* head1=NULL;
ElemType* head2=NULL;

ElemType* CreatePolyn()
{//初始化多项式
        ElemType* head=(ElemType*)malloc(sizeof(ElemType));
        head->next=NULL;
        return head;
}

void AddPolyn(ElemType* head,float coef,int expn)
{//增加多项式节点
        if(coef == 0.0)
                return;
        for(ElemType* cur=head;cur->next != NULL && cur->next->expn < expn;cur=cur->next);
        ElemType* newnode=(ElemType*)malloc(sizeof(ElemType));
        newnode->next=cur->next;
        newnode->coef=coef;
        newnode->expn=expn;
        cur->next=newnode;
}

void PrintPolyn(ElemType* head)
{//打印多项式
        for(ElemType* cur=head->next;cur != NULL;cur=cur->next)
        {
                printf("coef:%f,expn=%d\n",cur->coef,cur->expn);
        }
}

void MergePolyn(ElemType* head1,ElemType* head2)
{//合并多项式head1+head2->head1
        ElemType* cur1=head1;

        while(cur1->next && head2->next)
        {
                ElemType* cur2=head2->next;

                if(cur2->expn < cur1->next->expn)//插入cur1之前
                {
                        head2->next=cur2->next;
                        cur2->next=cur1->next;
                        cur1->next=cur2;
                }
                else if(cur2->expn == cur1->next->expn)
                {
                        cur1->next->coef += cur2->coef;
                       
                        if(cur1->next->coef == 0)
                        {
                                ElemType* p=cur1->next;
                                cur1->next=p->next;
                                delete p;
                        }
                        else
                        {
                                cur1=cur1->next;
                        }
                        head2->next=cur2->next;
                        delete cur2;
                }
                else
                {
                        cur1=cur1->next;
                }

        }
       
        if(head2->next)
                cur1->next=head2->next;
        head2->next=NULL;
}

void DestroyPolyn(ElemType* head)
{//销毁多项式
        ElemType* cur=head;
        while(cur->next)
        {
                ElemType* p=cur->next;
                delete cur;
                cur=p;
        }
}

int main(int argc, char* argv[])
{
        head1=CreatePolyn();
        head2=CreatePolyn();
        //7+3x+9x^8+5x^17
        AddPolyn(head1,7,0);
        AddPolyn(head1,3,1);
        AddPolyn(head1,9,8);
        AddPolyn(head1,5,17);
        printf("head1:\n");
        PrintPolyn(head1);

        //8x+22x^7-9x^8
        AddPolyn(head2,8,1);
        AddPolyn(head2,22,7);
        AddPolyn(head2,-9,8);
        printf("head2:\n");
        PrintPolyn(head2);

        MergePolyn(head1,head2);
        printf("head1:\n");
        PrintPolyn(head1);
        printf("head2:\n");
        PrintPolyn(head2);
        DestroyPolyn(head1);
        DestroyPolyn(head2);

        getchar();
        return 0;
}




单链表头结点移动到链表最后:
    Status A(LinList L)
    {
      if(L && L->next)   
      {
            Q=L;
            L=L->next;
            P=L;
            while(P->next) P=P->next;
            P->next=Q;
            Q->next=NULL;
      }
      return OK;
    }

双链表拆分成2个双链表
    void BB(LNode* s,LNode* q)
    {
      p=s;
      while(p->next != q)
            p=p->next;
      p->next=s;
    }

    void AA(LNode* pa,LNode* pb)
    {
      BB(pa,pb);
      BB(pb,pa);
    }

10进制转换为8进制
    void conversion()
    {
      InitStack(S);
      scanf("%d",N);
      while(N)
      {
            Push(S,N%8);
            N=N/8;
      }
      while(!StackEmpty(s))
      {
            Pop(S,e);
            printf("%d",e);
      }
    }

0xAA55 发表于 2014-7-18 05:01:40

加油。

元始天尊 发表于 2014-7-18 12:21:13

数据库笔记2

数据库管理系统:
    交互式接口
    词法分析器,语法树
    存取路径,查询优化
    DBMS存取原语,打开、存取记录、建立索引
    解决共享、冲突以及故障恢复机制
    分配内存、磁盘IO、读取物理块

事务:transaction,DBMS的执行单位,由有限的操作序列组成
    执行的原子性:(atomic)要么都做要么全部做
    功能一致性:(consistency)从一个状态到另一个状态满足一致性
    彼此数据的隔离性:(isolation)多个事务可以并发执行,同一事务相互隔离
    作用的持久性:(durability)事务对数据库的影响是持久的,发生故障可以恢复

    只有在COMMIT后,数据库的变化才产生
    COMMIT与事务避免不一致的情形
    COMMIT应该执行时间很短

进程:拥有自己的内存,文件句柄和系统资源
线程:单个进程包含的执行路径:进程的代码和数据空间提供给所有的线程

网络数据库:
用户->客户应用系统->服务器API->连接性软件->网络协议->.......->网络协议->连接性软件->服务器软件->服务器OS->数据库
                                    客户机                                             网络                                        服务器

数据库管理系统内存区结构:
    系统全局区SGA    有所有服务器和客户机进程共享,用户进程需要查看的信息必须首先放到SGA中
      数据高速缓冲区
      字典高速缓冲区
      重做日志缓冲区为事务高速缓冲区
      共享SQL池为程序高速缓冲区
    程序全局区PGA    不能再进程中共享,存放数据和进程控制信息

数据目录:catalog
    是一组关于数据的数据:元数据,数据目录也是表格,可以使用查询语言
数据目录对DBMS服务:
    包括基表、视图定义
    存取路径(索引和散列)
    访问权限和查询优化条件
数据目录为系统定义并为系统所有:
    由系统自动维护
    被频繁访问的数据
    允许用户进行有控制的查询

0xAA55 发表于 2014-7-19 02:17:25

终于不需要我帮忙排版了哈
页: [1]
查看完整版本: 数据库笔记1