找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2684|回复: 4

数据库笔记1

[复制链接]

307

主题

228

回帖

7349

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5599 个
贡献
253 次
宅之契约
0 份
在线时间
949 小时
注册时间
2014-1-25
发表于 2014-7-18 00:42:10 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

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

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

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

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

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

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

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

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

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

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

回复

使用道具 举报

307

主题

228

回帖

7349

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5599 个
贡献
253 次
宅之契约
0 份
在线时间
949 小时
注册时间
2014-1-25
 楼主| 发表于 2014-7-18 23:49:13 | 显示全部楼层
多项式合并:

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

  3. #include "stdafx.h"

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

  6. struct ElemType
  7. {
  8.         ElemType* next;
  9.         float coef;//系数
  10.         int expn;//指数
  11. };

  12. ElemType* head1=NULL;
  13. ElemType* head2=NULL;

  14. ElemType* CreatePolyn()
  15. {//初始化多项式
  16.         ElemType* head=(ElemType*)malloc(sizeof(ElemType));
  17.         head->next=NULL;
  18.         return head;
  19. }

  20. void AddPolyn(ElemType* head,float coef,int expn)
  21. {//增加多项式节点
  22.         if(coef == 0.0)
  23.                 return;
  24.         for(ElemType* cur=head;cur->next != NULL && cur->next->expn < expn;cur=cur->next);
  25.         ElemType* newnode=(ElemType*)malloc(sizeof(ElemType));
  26.         newnode->next=cur->next;
  27.         newnode->coef=coef;
  28.         newnode->expn=expn;
  29.         cur->next=newnode;
  30. }

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

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

  41.         while(cur1->next && head2->next)
  42.         {
  43.                 ElemType* cur2=head2->next;

  44.                 if(cur2->expn < cur1->next->expn)//插入cur1之前
  45.                 {
  46.                         head2->next=cur2->next;
  47.                         cur2->next=cur1->next;
  48.                         cur1->next=cur2;
  49.                 }
  50.                 else if(cur2->expn == cur1->next->expn)
  51.                 {
  52.                         cur1->next->coef += cur2->coef;
  53.                        
  54.                         if(cur1->next->coef == 0)
  55.                         {
  56.                                 ElemType* p=cur1->next;
  57.                                 cur1->next=p->next;
  58.                                 delete p;
  59.                         }
  60.                         else
  61.                         {
  62.                                 cur1=cur1->next;
  63.                         }
  64.                         head2->next=cur2->next;
  65.                         delete cur2;
  66.                 }
  67.                 else
  68.                 {
  69.                         cur1=cur1->next;
  70.                 }

  71.         }
  72.        
  73.         if(head2->next)
  74.                 cur1->next=head2->next;
  75.         head2->next=NULL;
  76. }

  77. void DestroyPolyn(ElemType* head)
  78. {//销毁多项式
  79.         ElemType* cur=head;
  80.         while(cur->next)
  81.         {
  82.                 ElemType* p=cur->next;
  83.                 delete cur;
  84.                 cur=p;
  85.         }
  86. }

  87. int main(int argc, char* argv[])
  88. {
  89.         head1=CreatePolyn();
  90.         head2=CreatePolyn();
  91.         //7+3x+9x^8+5x^17
  92.         AddPolyn(head1,7,0);
  93.         AddPolyn(head1,3,1);
  94.         AddPolyn(head1,9,8);
  95.         AddPolyn(head1,5,17);
  96.         printf("head1:\n");
  97.         PrintPolyn(head1);

  98.         //8x+22x^7-9x^8
  99.         AddPolyn(head2,8,1);
  100.         AddPolyn(head2,22,7);
  101.         AddPolyn(head2,-9,8);
  102.         printf("head2:\n");
  103.         PrintPolyn(head2);

  104.         MergePolyn(head1,head2);
  105.         printf("head1:\n");
  106.         PrintPolyn(head1);
  107.         printf("head2:\n");
  108.         PrintPolyn(head2);
  109.         DestroyPolyn(head1);
  110.         DestroyPolyn(head2);

  111.         getchar();
  112.         return 0;
  113. }

复制代码


  1. 单链表头结点移动到链表最后:
  2.     Status A(LinList L)
  3.     {
  4.         if(L && L->next)   
  5.         {
  6.             Q=L;
  7.             L=L->next;
  8.             P=L;
  9.             while(P->next) P=P->next;
  10.             P->next=Q;
  11.             Q->next=NULL;
  12.         }
  13.         return OK;
  14.     }

  15. 双链表拆分成2个双链表
  16.     void BB(LNode* s,LNode* q)
  17.     {
  18.         p=s;
  19.         while(p->next != q)
  20.             p=p->next;
  21.         p->next=s;
  22.     }

  23.     void AA(LNode* pa,LNode* pb)
  24.     {
  25.         BB(pa,pb);
  26.         BB(pb,pa);
  27.     }

  28. 10进制转换为8进制
  29.     void conversion()
  30.     {
  31.         InitStack(S);
  32.         scanf("%d",N);
  33.         while(N)
  34.         {
  35.             Push(S,N%8);
  36.             N=N/8;
  37.         }
  38.         while(!StackEmpty(s))
  39.         {
  40.             Pop(S,e);
  41.             printf("%d",e);
  42.         }
  43.     }
复制代码
回复 赞! 1 靠! 0

使用道具 举报

1112

主题

1653

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24265 个
贡献
46222 次
宅之契约
0 份
在线时间
2299 小时
注册时间
2014-1-26
发表于 2014-7-18 05:01:40 | 显示全部楼层
加油。
回复

使用道具 举报

307

主题

228

回帖

7349

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5599 个
贡献
253 次
宅之契约
0 份
在线时间
949 小时
注册时间
2014-1-25
 楼主| 发表于 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服务:
    包括基表、视图定义
    存取路径(索引和散列)
    访问权限和查询优化条件
数据目录为系统定义并为系统所有:
    由系统自动维护
    被频繁访问的数据
    允许用户进行有控制的查询

回复 赞! 靠!

使用道具 举报

1112

主题

1653

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24265 个
贡献
46222 次
宅之契约
0 份
在线时间
2299 小时
注册时间
2014-1-26
发表于 2014-7-19 02:17:25 | 显示全部楼层
终于不需要我帮忙排版了哈
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-5-5 04:21 , Processed in 0.043326 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表