SQL-Oracle10数据库设计范式

2024-09-05 11:18

本文主要是介绍SQL-Oracle10数据库设计范式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据库设计范式工具 PowerDesigner

 

  数据库范式非常重要,但从实际开发来看,如果真的全部按照范式去做,则
这个程序没法写,包括查询语句也会变得复杂。
  在Oracle中的scott用户的全部表,实际上就已经很好的体现了一种设计思路,
雇员-部门的关系。

  第一范式:
   
    数据库表中的字段都是单一属性的,不可再分。这个单一属性由其基本类型构成,
包括整型、实数、字符型、逻辑型、日期型等。


插入以下测试数据:
INSERT INTO person(pid,name,info) VALUES (1111,'张三','1983-11-23出生,现在的住址是朝阳区');

实际上对于人员的信息来看,由以下几部分组成:
 生日:1983年11月23日
 省市:北京
 地区:西城区
 详细地址:


第一范式:每个字段不可再分,所以以上脚本可以修改为:
CREATE TABLE person(
 pid NUMBER(4) PRIMARY KEY NOT NULL,
 name VARCHAR2(50),
 birthday DATE,
 area VARCHAR2(200),
 subarea VARCHAR2(200),
 address VARCHAR2(200)
) ;

注意点:
 将姓名拆分成姓和名,这样的拆分无意义。要保证每个列有意义。

 


第二范式:

 数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖
(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),
也即所有非关键字段都完全依赖于任意一组候选关键字。
 


 当满足第一范式时,还有可能存在的问题是,数据库表中部分内容冗余。

使用第二范式:
  学生应该是一个实体表的信息
CREATE TABLE student(
 stuno VARCHAR2(50) PRIMARY KEY NOT NULL,
 stuname VARCHAR2(50) ,
 stuage NUMBER
) ;

CREATE TABLE course(
 cid NUMBER(5) PRIMARY KEY NOT NULL,
 cname VARCHAR2(50) ,
 credit NUMBER
) ;

CREATE TABLE selectcourse(
 stuno VARCHAR2(50),
 cid NUMBER(5),
 grade NUMBER
 加入外键关联,因为学生没了,成绩就没了,因为课程没了,成绩也没了。
) ;

 

 

INSERT INTO  student(stuno,stuname,stuage)VALUES ('s001','张三','20') ;
INSERT INTO  student(stuno,stuname,stuage)VALUES ('s002','李四','20') ;
INSERT INTO  student(stuno,stuname,stuage)VALUES ('s003','王五','20') ;

INSERT INTO  course(cid,cname,credit)VALUES ('ca','JAVA',3) ;
INSERT INTO  course(cid,cname,credit)VALUES ('cb','Oracle',5) ;


INSERT INTO selectcourse(stuno,cid,grade) VALUES ('s001','ca',79.0)
INSERT INTO selectcourse(stuno,cid,grade) VALUES ('s001','ca',77.0)
INSERT INTO selectcourse(stuno,cid,grade) VALUES ('s001','ca',77.0)


以上设计解决了问题:
 学生不选课的时候,课程信息不会消失
 更新课程的时候直接更新课程表即可
 所有的关联关系在关系表中体现。
也就是说现在完成了一个多对多的关系。

 

 

第三范式

  第三范式在实际开发中用的频率最多。
 
 

  例如,要求设计一张学生表,包含学号、姓名、年龄、所在院校、学院地址、
学院电话,此时肯定不能使用第一范式,但是现在如果使用的是第二范式呢?
 
CREATE TABLE student(
 stuno VARCHAR2(50) PRIMARY KEY NOT NULL,
 stuname VARCHAR2(50) ,
 stuage NUMBER
) ;

CREATE TABLE college(
 cid NUMBER(4) PRIMARY KEY NOT NULL,
 cname VARCHAR2(50) NOT NULL ,
 caddress VARCHAR2(200) NOT NULL ,
 ctel VARCHAR2(200) NOT NULL
) ;

CREATE TABLE studentcollage(
 ctuno VARCHAR2(50) ,
 cid NUMBER(4) ,
 设置主-外键关系
) ;


  按照这种设计,一个学生可以同时在多个学生可以在多个学院同时上课,
多个学院会同时有同一个学生在上课。

 此时,最好是:一个学院包含多个学生,一个学生属于一个学院。
实际上,此设计就完全类似于部门和雇员表的设计结构。

 

 

 

CREATE TABLE student(
 stuno VARCHAR2(50) PRIMARY KEY NOT NULL,
 stuname VARCHAR2(50) ,
 stuage NUMBER ,
 cid BUMBER(4) ,
 建立主-外键关联
) ;
  是一个很明确的一对多的关系设计。
 
 


以上的三个范式只能算是参考,如果真的按照此种方式设计数据库,则有够累,
数据库设计的唯一原则:
        ·数据库表的关联查询越少越好,sql语句的复杂度越低越好。

这篇关于SQL-Oracle10数据库设计范式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138803

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry