模型是现实世界特征的模拟和抽象。在数据库技术中,用数据模型的概念描述数据库的结构和语义,是对现实世界的数据抽象。数据模型是研究数据库技术的核心和基础。 数据库技术中研究的数据模型分为两个层面:一层是面向用户的,称为概念模型;另一层面是面向计算机系统的,称为结构模型。

1. 概念数据模型

概念数据模型是独立于计算机系统的数据模型,用来描述某个特定组织关心的信息结构,属于信息世界的建模,所以概念模型应该能够方便、准确地表示客观世界中常用的概念。另外概念数据模型也是用户和应用系统设计员互相交流的桥梁,以保证数据模型能够正确地描述客观世界。

概念模型的表示方法最常用的是P.P.Chen于1976年提出的"实体-联系图方法(Entity-Relationship Approach),简称E-R模型"。E-R实体联系图是直观表示概念模型的工具,其中包含了实体、联系、属性三个成分,联系的方法为一对一(1:1)、一对多(1:N)、多对多(M:N)三种方式,联系属于哪种方式取决于客观实际本身。

E-R模型图,既表示实体,也表示实体之间的联系,是现实世界的抽象,与计算机系统没有关系,是可以被用户理解的数据描述方式。通过E-R模型图可以使用户了解系统设计者对现实世界的抽象是否符合实际情况,从某种程度上说E-R模型图也是用户与系统设计者进行交流的工具,E-R模型图已成为概念模型设计的一个重要设计方法。

阅读全文 »

1. 现实世界

  现实世界是存在于人们头脑之外的客观世界,是客观事物及其互相的联系。例如学校教学管理中涉及的学生管理、教师管理、课程管理。管理者要求:每个学期开学时制作学生选修课程情况表,内容包括学号、姓名、课程名、选修课类别(类别分为必修、选修);每个学期结束时制作学生选修课程成绩表,内容包括学号、姓名、课程名、选修课的类别、总评成绩;制作教师授课安排表,内容包括教师号、教师名,课程名,授课类别(授课类别分为主讲、辅导、实验)、学时数、班级数等。这就是现实世界,是数据库设计者接触到的最原始的数据,数据库设计者对这些原始数据进行综合、抽象成为数据库技术所能处理的数据。对现实世界的数据描述,就成为信息世界。

2. 信息世界

  信息世界是现实世界的符号描述,即将客观世界用数据来描述。例如,学生是客观世界的个体,可以用一组数据(学号、姓名、性别、年龄、班级、成绩)来描述,有这样一组数据不见其人便可以了解该学生的基本情况。因此可以说信息世界就是我们所说的数据世界。信息世界中的术语包括:

(1) 实体。客观世界存在的、可以区别的事物称为实体。实体可以是具体的事物,例如学生李,教师张、数学课,也可以是抽象的事件,例如:本学期学生李选修了哪些课程,教师张教授了哪门课程,读者的一次借阅活动等。

(2) 属性。实体有很多特性,每个特性称为实体的一个属性,每个属性有一个类型。例如学生实体的属性有:学号、姓名、性别、年龄、班级、成绩,其中学号、姓名、班级的类型为字符型,性别的类型为逻辑型,年龄的类型为整型。

(3) 实体集。性质相同的实体的集合。例如全体学生的集合,全体教师集合等。

(4) 实体标识符。能够唯一标识实体的属性或属性的集合。如学生实体的属性:学号,能够唯一确定一个学生,因此可以作为学生实体集的标识符。

阅读全文 »

Java开发中的一些小技巧

Java获取URL地址中传递的参数

/**
     * 获取URL中的参数名和参数值的Map集合
     * @param url
     * @return
     */
    private Map<String, String> getUrlPramNameAndValue(String url){
    String regEx="(\\?|&+)(.+?)=([^&]*)";//匹配参数名和参数值的正则表达式
        Pattern p = Pattern.compile(regEx);  
        Matcher m = p.matcher(url);
     // LinkedHashMap是有序的Map集合,遍历时会按照加入的顺序遍历输出
    Map<String, String> paramMap = new LinkedHashMap<String, String>();
        while(m.find()){
        String paramName = m.group(2);//获取参数名
        String paramVal=m.group(3);//获取参数值
            paramMap.put(paramName, paramVal);
        }
        return paramMap;
    }

阅读全文 »

我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK

当我们想要切换使用的JDK版本时,我们可以有两种做法:
  1.手动去修改JAVA_HOME环境变量,将变量的值指向对应的JDK版本的安装目录即可.
  2.通过编写批处理脚本来根据选择的JDK版本动态修改JAVA_HOME环境变量的值,这是一种偷懒的做法,这种做法需要一个RefreshEnv.exe辅助软件来刷新环境变量的值



阅读全文 »

解析xls

package xls;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class XlsMain {

    public static void main(String[] args) throws IOException {
        XlsMain xlsMain = new XlsMain();

        xlsMain.readXls();
    }

    private void readXls() throws IOException {
        InputStream is = new FileInputStream("D:\\excel\\xls_test2.xls");
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

        // 循环工作表Sheet
        for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }

            // 循环行Row 
            for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow == null) {
                    continue;
                }

                // 循环列Cell  
                for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) {
                    HSSFCell hssfCell = hssfRow.getCell(cellNum);
                    if (hssfCell == null) {
                        continue;
                    }

                    System.out.print("    " + getValue(hssfCell));
                }
                System.out.println();
            }
        }
    }

    @SuppressWarnings("static-access")
    private String getValue(HSSFCell hssfCell) {
        if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
            return String.valueOf(hssfCell.getBooleanCellValue());
        } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
            return String.valueOf(hssfCell.getNumericCellValue());
        } else {
            return String.valueOf(hssfCell.getStringCellValue());
        }
    }

}

阅读全文 »