SQL Serever学习17——数据库的分析和设计
数据库的分析和设计
设计数据库确定一个合适的数据模型,满足3个要求:
- 符合用户需求,包含用户所需的所有数据
- 能被数据库管理系统实现,如sqlserver,oracle,db2
- 具有比较高质量,容易理解,使用方便,便于维护,效率高
设计步骤分为6步:
- 需求分析,与用户沟通,达成统一意见
- 概念结构设计,创建E-R图
- 逻辑结构设计,从E-R图转为关系模型,1对多,多对多,建立数据模型,数据库三范式
- 物理结构设计,确定数据类型,是否可空,确定主键,外键,索引
- 数据库实施
- 数据库运行维护
数据库的三范式:
- 1NF,每个属性不可在分割,比如地址如果有省,市,那么还可以在分为省属性,城市属性
- 2NF,满足1NF前提下,每个非主键属性都依赖于主键,比如员工表(主键员工Id)的字段有部门Id和部门主管(依赖于部门Id,而不是员工Id),那么就要去掉部门主管字段
- 3NF,满足2NF前提下,非主键属性不能是其他字段的函数传递值,比如员工表的奖金字段=薪资字段X20%,那么就不符合3NF,应该去掉奖金字段
数据库系统开发
使用visual studio 2012工具,使用C#开发语言,创建有关销售管理数据库的windows应用系统。
ADO.NET介绍
是统一数据容器类编程接口,包含了2个核心:
- .NET Framework数据提供程序,为数据处理和快速访问数据设计的组件,有4个对象(Connection,Command,DataReader,DataAdapter)
- DataSet,看做内存中的数据源,将数据缓存到本地,进行数据的处理,不需要占用连接,可以释放连接给其他客户使用
使用ADO.NET开发数据库应用程序的步骤:
- 根据使用的数据源,确定.NET Framework数据提供程序(SQL Server,OLE DB , ODBC Oracle)
- 建立数据源连接,Connection对象
- 执行SQL操作,Command对象
- 获取数据,DataReader对象,DataSet对象
- 展示数据
使用ADO.NET连接数据库
自动配置数据库
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java源码 - ReentrantLock之NonfairSync
开篇 NonfairSync和FairSync相比而言,多了一次抢占机会,其他处理逻辑几乎是一模一样。 NonfairSync的tryAcquire的操作流程中如果发现当前锁未被占用那么立即抢占锁。 FairSync的tryAcquire的操作流程中如果发现当前锁未被还需要继续判断当前线程否是头结点才能发起锁抢占java源码 - ReentrantLockjava源码 - ReentrantLock之FairSyncjava源码 - ReentrantLock之NonfairSyncjava源码 - ReentrantLock图解加锁过程 加锁过程 ReentrantLock的的锁过程如下: 1、先尝试获取锁,通过tryAcquire()实现。 2、获取锁失败后,线程被包装成Node对象后添加到CLH队列,通过addWaiter()实现。 3、添加CLH队列后,逐步的去执行CLH队列的线程,如果当前线程获取到了锁,则返回;否则,当前线程进行休眠,直到唤醒并重新获取锁了才返回。 public void lock() { sync.lock(); } static final class...
- 下一篇
java源码 - ReentrantLock图解加锁过程
开篇 用图形化的方式加深加锁和解锁过程的解释性。 java源码 - ReentrantLockjava源码 - ReentrantLock之FairSyncjava源码 - ReentrantLock之NonfairSyncjava源码 - ReentrantLock图解加锁过程 加锁流程 1、首先我们分析非公平锁的的请求过程。我们假设在这个时候,还没有任务线程获取锁,这个时候,第一个线程过来了(我们使用的是非公平锁),那么第一个线程thread1会去获取锁. 这时它会调用下面的方法,通过CAS的操作,将当前AQS的state由0变成1,证明当前thread1已经获取到锁,并且将AQS的exclusiveOwnerThread设置成thread1,证明当前持有锁的线程是thread1。: final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else acquire(1); } 2、此时来了第二个线程thread2,并且我们假设thread1还...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- Hadoop3单机部署,实现最简伪集群
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16