为什么要进行数据库规范设计:
-
- 信息重复
- 更新异常
- 插入异常
- 无法正常显示信息
- 删除异常
- 丢失有效信息
-
数据库设计的三大范式:
- 第一范式:要求数据库的每一列都是不可分割的原子数据项(原子性即每个字段只包含一一个不可分割的属性)。
- 第二范式:前提满足第一范式,每张表只描述一件事情,主键依赖--每个非主键的字段都必须依赖于全部的主键(即只有通过所有的主键才能唯一标识,确认唯一的字段信息)
- 第三范式:满足第二范式的基础上,非主属性不存在传递依赖。(即不存在传递依赖--即除了非主属性完全依赖于主键外,非主属性之间也存在依赖)
- 依赖即使可以通过自己的信息找到你所依赖的唯一信息。
-
规范性和性能的问题:
- 关联查新不得超过三张表
- 考虑商业化的需求和目标,(成本和用户体验)数据库的性能更加重要
- 在规范性能的问题的时候,需要适当考虑一下规范性
- 故意给某些表增加一些冗余的字段,(从多表查询中变成单表查询)
- 故意增加一些计算列(从大数据量变成小数据量查询;增加索引)
- 关联查新不得超过三张表
-
MySQL数据库连接示例:
package com.model.test; import java.sql.*; public class JDBC { public static void main(String[] args) throws SQLException { Connection connection=null; Statement statement=null; ResultSet resultSet=null; try { //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取用户的信息和url String url="jdbc:mysql://localhost:3306/shop"; String username="root"; String password="12346"; //3.获取数据库连接对象Connection connection = DriverManager.getConnection(url, username, password); //4.获取SQL执行对象Statement statement = connection.createStatement(); //5.获取SQL语句 String sql="select * from user"; //6.执行SQL并获取返回值 resultSet = statement.executeQuery(sql); //7.遍历返回值result即可 while (resultSet.next()){ String id = (String) resultSet.getObject("id"); String name = (String) resultSet.getObject(2); System.out.println("id号:"+id+"姓名:"+name); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); }finally { //8.关闭连接 resultSet.close(); statement.close(); connection.close(); } } }