数据库设计的需求分析 发表于 2018-10-17 分类于 学习笔记 , 数据库系统 本文字数: 2.1k 阅读时长 ≈ 2 分钟 【需求分析的任务】需求分析的任务是通过详细调查现实世界要处理的对象,充分了解原系统的工作概括,明确用户的各种需求,然后在此基础上确定新系统的功能,并充分考虑今后可能的扩充与改变 调查的重点是数据与处理,通过调查、收集、分析,获得用户对数据库的如下要求: 阅读全文 »
数据库设计概述 发表于 2018-10-17 分类于 学习笔记 , 数据库系统 本文字数: 1.3k 阅读时长 ≈ 1 分钟 【概述】数据库设计,广义来讲,是数据库及其应用系统的设计,即设计整个数据库应用系统;狭义来讲,是设计数据库本身,即设计数据库的各级模式并建立数据库,属于数据库应用系统设计的一部分 数据库设计的一般定义为:对于一个给定的应用环境,构造优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求 阅读全文 »
暴力搜索 发表于 2018-10-16 分类于 OI&ACM , 查找&搜索 , 顺序查找 本文字数: 649 阅读时长 ≈ 1 分钟 【概述】顺序查找(Sequential search),又称线性查找,其可分为无序表的查找和有序表的查找 对无序表的查找即暴力搜索,其核心思想是:将所有情况都列举到线性表或数组中,根据要求找一个合适的维度,枚举每一个元素,并对每一个元素判断其是否符合条件 阅读全文 »
范式 发表于 2018-10-15 分类于 学习笔记 , 数据库系统 本文字数: 3.2k 阅读时长 ≈ 3 分钟 【概述】对于范式来说,数据依赖和函数依赖下定义的码是必不可缺的前置内容,其详细介绍见下: 数据依赖:点击这里 函数依赖下定义的码:点击这里 阅读全文 »
函数依赖下的码 发表于 2018-10-15 分类于 学习笔记 , 数据库系统 本文字数: 739 阅读时长 ≈ 1 分钟 【候选码与主码】设 $K$ 是 $R < U,F >$ 中的属性或属性组合,若 $K\xrightarrow{F} U$,则称 $K$ 为 $R$ 的候选码(Candidate Key),若候选码多于一个,则选定其中一个为主码(Primary Key) 例如,在关系模式 student(Sno, Sname, Sage) 中,Sno 是可以唯一标识一个元组的,同样的 (Sno, Sage) 也可以唯一标识一个元组,但这个组合不能称为候选码,因为即使去掉 Sname 属性,剩下的 Sno 也完全可以唯一标识一个元组 阅读全文 »
树、二叉树、森林的相互转换 发表于 2018-10-15 分类于 OI&ACM , 数据结构 , 树与二叉树 本文字数: 1.1k 阅读时长 ≈ 1 分钟 【树的遍历】树中最基本的操作是遍历,从根结点出发,按照某种次序访问树中的所有结点,使得每个结点仅被访问一次 根据树的定义可知:一棵树由根结点和 $m$ 棵子树构成,因此只要递归的遍历根结点和 $m$ 棵子树即可遍历整棵树 阅读全文 »
数据依赖 发表于 2018-10-15 分类于 学习笔记 , 数据库系统 本文字数: 3.7k 阅读时长 ≈ 3 分钟 【函数依赖】函数依赖设 $R(U)$ 是属性集 $U$ 上的关系模式,$X$、$Y$ 是 $U$ 的子集,若对于 $R(U)$ 的任意一个可能的关系 $r$,$r$ 中不可能存在两个元组在 $X$ 上的属性值相等,而 $Y$ 上的属性值不等,则称 $X$ 函数确定 $Y$,或 $Y$ 函数依赖于 $X$,记作:$X\rightarrow Y$ 阅读全文 »
关系数据理论 发表于 2018-10-15 分类于 学习笔记 , 数据库系统 本文字数: 1.1k 阅读时长 ≈ 1 分钟 【问题的提出】之前已经介绍过关系数据库的基本概念、关系模型的三部分、关系数据库的标准语言 SQL,但有一个很基本的问题没有涉及:针对一个具体问题,应该如何构造一个适合它的数据库模式,即应该构造几个关系模式,每个关系由哪些属性组成等 这个问题确切来讲是关系数据库逻辑设计问题,由于关系模型有严格的数学理论基础,且可以向别的数据模型转换,因此,以关系模型为背景讨论这个问题,形成了数据库逻辑设计的一个有力工具,即关系数据库规范化理论 阅读全文 »
二叉树的遍历 发表于 2018-10-15 分类于 OI&ACM , 数据结构 , 树与二叉树 本文字数: 3.5k 阅读时长 ≈ 3 分钟 【概述】树中最基本的操作是遍历,即从根结点出发,按照某种次序访问树中的所有结点,使得每个结点仅被访问一次 在二叉树中,有两种遍历方式,一种是基于树的递归特性的前/中/后序遍历,一种是基于树的层次特性的层次遍历 阅读全文 »
树的数据生成器 发表于 2018-10-13 分类于 OI&ACM , 数据结构 , 树与二叉树 本文字数: 1.1k 阅读时长 ≈ 1 分钟 为方便测试与树相关的算法而编写的树的随机数据生成器 树的结点为 1~10 个,边权为 1~100,各点编号随机化 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include <algorithm>#include<ctime>using namespace std;#define N 50struct Edge { int x, y; int dis;} edge[N];int n,edgeTot;int tot, x[N], y[N], dis[N];int id[N], father[N];int Find(int x) { return father[x] == x ? x : Find(father[x]); }int main() { srand(time(0)); n = rand() % 10 + 1; printf("%d\n", n); for (int i = 1; i <= n; ++i) { for (int j = i + 1; j <= n; ++j) { x[++tot] = i; y[tot] = j; dis[tot] = rand() % 100 + 1; } } for (int i = 1; i <= tot; ++i){ id[i] = i; father[i] = i; } random_shuffle(id + 1, id + tot + 1); for (int i = 1; i <= tot; ++i) { int pos = id[i]; int fx = Find(x[pos]); int fy = Find(y[pos]); if (fx == fy) continue; father[fy] = fx; edge[++edgeTot].x = x[pos]; edge[edgeTot].y = y[pos]; edge[edgeTot].dis = dis[pos]; if (edgeTot == n - 1) break; } for ( int i = 1; i <= edgeTot; i++) printf("%d %d %d\n", edge[i].x, edge[i].y, edge[i].dis); system("pause"); return 0;} 阅读全文 »