数据库范式

数据库范式的定义 在设计数据库的时候,为了设计出合理的关系型数据库,就需要遵循一些规范要求,这些规范要求被成为数据库范式。 目前,关系型数据库主要有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般来说,数据库满足前三个范式就可以了。 第一范式(1NF) 定义 所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。 解释 第一范式是指数据库表中的每个字段都是不可分解的,即数据库表中的字段具有原子性。 例如,我们有个学生信息表,如下: id name age address 001 张三 26 山东省青岛市XX县XX镇XX村XX号 002 李四 25 河南省开封市XX县XX区XX号 这个表就违反了第一范式,因为表中的字段 地址(address) 可以重新拆分为 省(address_province) 市(address_city) 详细地址(address_detail)。 id name age address_province address_city address_detail 001 张三 26 山东省 青岛市 XX县XX镇XX村XX号 002 李四 25 河南省 开封市 XX县XX区XX号 如上图所示的表遵循了第一范式,对学生的地址管理就方便了很多,也能提高数据库的性能。比如我们要查询青岛市的学生有谁的时候。...

June 13, 2018 · 1 min · sunbufu

最短路径-弗洛伊德

1.定义概述 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。 2.实例演示 /** * 弗洛伊德算法求最短路径 * @author sunbufu * */ public class ShortestPathFloyd { /**无穷大*/ final static int INF = Integer.MAX_VALUE; public static void main(String[] args) { int[] points = { 1, 2, 3, 4, 5, 6 }; int[][] weights = { // 1 2 3 4 5 6 {0, 7, 9, INF, INF, 14 },//1 {7, 0, 10, 15, INF, INF },//2 {9, 10, 0, 11, INF, 2 },//3 {INF, 15, 11, 0, 6, INF },//4 {INF, INF, INF, 6, 0, 9 },//5 {14, INF, 2, INF, 9, 0 } //6 }; int[][] previousPoint = { // 1 2 3 4 5 6 {1, 2, 3, 4, 5, 6 },//1 {1, 2, 3, 4, 5, 6 },//2 {1, 2, 3, 4, 5, 6 },//3 {1, 2, 3, 4, 5, 6 },//4 {1, 2, 3, 4, 5, 6 },//5 {1, 2, 3, 4, 5, 6 } //6 }; floyd(points, weights, previousPoint); } private static void floyd(int[] points, int[][] weights, int[][] previousPoint) { int pointsNumber = points....

June 13, 2018 · 2 min · sunbufu

最短路径-迪杰斯特拉

1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 2.实例演示 设结点1为起点,依次求到其它结点的最短路径。 /** * 迪杰斯特拉算法求最短路径 * @author sunbufu * */ public class ShortestPathDijkstra { /**无穷大*/ final static int INF = Integer.MAX_VALUE; public static void main(String[] args) { int[] points = { 1, 2, 3, 4, 5, 6 }; int[][] weights = { // 1 2 3 4 5 6 {0, 7, 9, INF, INF, 14 },//1 {7, 0, 10, 15, INF, INF },//2 {9, 10, 0, 11, INF, 2 },//3 {INF, 15, 11, 0, 6, INF },//4 {INF, INF, INF, 6, 0, 9 },//5 {14, INF, 2, INF, 9, 0 } //6 }; dijkstra(points, weights); } public static void dijkstra(int[] points, int[][] weights) { int pointsNumber = points....

June 13, 2018 · 2 min · sunbufu

ANE打包步骤

一、新建工程 1、新建Android工程 记得选中Mark this project as a library 1.1 构建路径导入Jar包 FlashRuntimeExtensions.jar 路径如:flashbuilder\sdks\4.6.0\lib\android\ 1.2 三个必须类: 实现FREFunction,实现其中的call方法。call方法是真正和android交互的方法。 继承FREContext,其中的getFunctions方法用于获取1)的类对象的Map容器,容器的key用于以后获取该对象。 实现FREExtension,其中createContext方法用于获取2)类的对象。 1.3 导出*.jar包 2、新建iPhone工程(Cocoa Touch Static Library) 2.1 导入头文件 FlashRuntimeExtensions.h 路径如:Application/Adobe Flash Builder 4.6/sdks/4.6.0/include/ 2.2 必须实现的方法 contextInitializer用来执行初始化操作(例如将与iPhone的原生实现的方法添加到里面) iPhone的原生实现的方法 2.3 导出*.a静态库 command+B,编译出*.a文件 二、新建AS的Lib工程,用于调用一、(记得选中包括Adobe AIR库) var context:ExtensionContext = ExtensionContext.createExtensionContext("com.three.Extension","");//com.three.Extension为Android项目中FREExtension的实现的全路径名 context.call("test", value);//为FREContext的子类Map容器的key 复制出AS工程bin目录下的*.swc文件 注意:有时需要在Flex库编译器中添加 -swf-version 18 三、新建extension.xml文件 内容如下: <extension xmlns="http://ns.adobe.com/air/extension/20.0"> <id>shs.ANE.pay</id> <versionNumber>1.0.0</versionNumber> <platforms> <platform name="iPhone-ARM"> <applicationDeployment> <nativeLibrary>libPayiPhone.a</nativeLibrary> <initializer>init</initializer> </applicationDeployment> </platform> <platform name="Android-ARM"> <applicationDeployment> <nativeLibrary>PayAndroid....

June 6, 2018 · 2 min · sunbufu

SQL总结

一、SQL定义 SQL语言的全称是Structured Query Language,即结构化查询语言。 1、SQL分类 1)DQL(Data Query Language 数据查询语言) 查询语句只有一种,即SELECT语句。 2)DML(Data Manipulation Language 数据操作语言) 包括:INSERT、UPDATE、DELETE等常用语句。 3)DDL(Data Definition Language 数据定义语言) 包括:CREATE(创建),ALTER(修改),DROP(删除),RENAME(重命名),TRUNCAT(截断)等常用语句。 4)DCL(Data Control Language 数据控制语言) 包括:GRANT(权限分配),REVOKE(权限回收),TRANSACTION(事务处理)。 5)事务控制语句TRANSACTION(事务处理) 包括:COMMIT(提交)、ROLLBACK(回滚)等常用语句。 二、DQL(Data Query Language 数据查询语言) 1、列查询 1)单列查询 SELECT 字段 [AS] [别名] FROM 表名; --别名显示时,AS可以省略,例如: SELECT EMPNO AS "ID" FROM EMP;--"ID"双引号表示原样显示 2)多列查询 SELECT 字段 [AS] [别名], 字段2 [AS] [别名2] ... 字段n [AS] [别名n] FROM 表名; 3)所有列查询 SELECT * FROM 表名; 4)去重 关键字:DISTINCT(明显的,独特的) SELECT DISTINCT 字段 [AS] [别名] FROM 表名; 2、行查询(限制查询、条件查询) SELECT 字段, 组函数....

June 6, 2018 · 4 min · sunbufu