精华内容
下载资源
问答
  • 数据库设计

    万次阅读 2019-09-03 10:48:05
    数据库设计 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步 在开发中有很多设计数据库的软件,常用的如power designer,db ...

    数据库设计

    关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步

    在开发中有很多设计数据库的软件,常用的如power designer,db desinger等,这些软件可以直观的看到实体及实体间的关系

    设计数据库,可能是由专门的数据库设计人员完成,也可能是由开发组成员完成,一般是项目经理带领组员来完成

    现阶段不需要独立完成数据库设计,但是要注意积累一些这方面的经验

    三范式

    经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式(Normal Form)

    目前有迹可寻的共有8种范式,一般需要遵守3范式即可

    ◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。

    考虑这样一个表:【联系人】(姓名,性别,电话) 如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。

    ◆ 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

    考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。

    可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。

    ◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

    考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。 其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。 通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。 *第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

    不遵循1NF

    数据库设计

     

    不遵循2NF

    数据库设计

     

    不遵循3NF

    数据库设计

     

    最终表

    数据库设计

     

    E-R模型

    E表示entry,实体,设计实体就像定义一个类一样,指定从哪些方面描述对象,一个实体转换为数据库中的一个表

    R表示relationship,关系,关系描述两个实体之间的对应规则,关系的类型包括包括一对一、一对多、多对多

    关系也是一种数据,需要通过一个字段存储在表中

    实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值

    数据库设计

     

    实体A对实体B为1对多:在表B中创建一个字段,存储表A的主键值

    数据库设计

     

    实体A对实体B为多对多:新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值

    数据库设计

     

    想一想:举些例子,满足一对一、一对多、多对多的对应关系

    逻辑删除

    对于重要数据,并不希望物理删除,一旦删除,数据无法找回

    删除方案:设置isDelete的列,类型为bit,表示逻辑删除,默认值为0

    对于非重要数据,可以进行物理删除

    数据的重要性,要根据实际开发决定

    示例

    设计两张表:班级表、学生表

    班级表classes

    id

    name

    isdelete

    学生表students

    id

    name

    birthday

    gender

    clsid

    isdelete

    展开全文
  • 数据库题目之数据库设计

    千次阅读 2019-01-10 15:21:25
    1、在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的 阶段。 A.需求分析 B.概念设计 C.逻辑设计 D.物理设计 【答案:】B 2、在关系数据库设计中,设计关系模式是 的...

    一、选择题

    1、在数据库设计中,用E-R来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的     阶段。

    A.需求分析 B概念设计 C.逻辑设计 D.物理设计    

    【答案:】B

    2、在关系数据库设计中,设计关系模式    的任务。

    A.需求分析阶段 B.概念设计阶段 C逻辑设计阶段 D.物理设计阶段  

    【答案:】C

    3、数据库物理设计完成后,进入数据库实施阶段,下列各项中属于实施阶段的工作是    

    A.建立库结构 B扩充功能 C.加载数据 D.系统调试      

    【答案:】B

    4、在数据库的概念设计中,最常用的数据模型    

    A.形象模型 B.物理模型 C.逻辑模型 D实体联系模型     

    【答案:】D

    5、E-R模型关系向关系模型转换时,一个MN联系转换为关系模型时,该关系模式的关键字是    

    AM端实体的关键字  BN端实体的关键字 CM端实体关键字与N端实体关键字组合 D.重新选取其他属性

    【答案:】C

    6、当局部E-R图合并成全局E-R图时可能出现冲突,不属于合并冲突的是   

    A.属性冲突 B.语法冲突 C.结构冲突 D.命名冲突      

    【答案:】B

    7、概念模型独立于      

    AE-R模型 B硬件设备和DBMS C.操作系统和DBMS DDBMS    

    【答案:】B

    8、数据流程图(DFD是用于描述结构化方法中    阶段的工具。

    A.可行性分析 B.详细设计 C.需求分析 D.程序编码

    【答案:】C

    9、下图所示的E-R图转换成关系模型,可以转换为    关系模式。

    A1 B2  C3   D4

    【答案:】C

    二、填空题

    1、数据库设计的几个步骤            

    【答案:】需求分析,概念设计,逻辑设计,物理设计,系统实施,系统运行和维护

    2、“为哪些表,在哪些字段上,建立什么样的索引”这一设计内容应该属于数据库   设计阶段。

    【答案:】物理

    3、在数据库设计中,把数据需求写成文档,它是各类数据描述的集合,包括数据项、数据结构、数据流、数据存储和数据加工过程等的描述,通常称为   

    【答案:】数据字典

    4、在设计分E-R时,由于各个子系统分别有不同的应用,而且往往是由不同的设计人员设计的,所以各个分E-R图之间难免有不一致的地方,这些冲突主要有       三类。

    【答案:】属性冲突 命名冲突 结构冲突

    三、简答题

    数据库设计一般分为哪几个阶段,每个阶段的主要任务是什么?

    解答:(1)数据库设计分为6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。

    (2)各阶段任务如下:①需求分析:准确了解与分析用户需求(包括数据与处理)。②概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型。③逻辑结构设计:将概念结构转换为某个 DBMS 所支持的数据模型,并对其进行优化。④数据库物理设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。⑤数据库实施:设计人员运用 DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 ⑥数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。

    一、假设教学管理规定:

    ①一个学生可选修多门课,一门课有若干学生选修;

    ②一个教师可讲授多门课,一门课只有一个教师讲授;

    ③一个学生选修一门课,仅有一个成绩。

    学生的属性有学号、学生姓名;教师的属性有教师编号,教师姓名;课程的属性有课程号、课程名。

    要求:根据上述语义画出ER图,要求在图中画出实体的属性并注明联系的类型;

     

     

    解答:

     

     

     

    二、某企业集团有若干工厂,每个工厂生产多种产品,且每一种产品可以在多个工厂生产,每个工厂按照固定的计划数量生产产品;每个工厂聘用多名职工,且每名职工只能在一个工厂工作,工厂聘用职工有聘期和工资。工厂的属性有工厂编号、厂名、地址,产品的属性有产品编号、产品名、规格,职工的属性有职工号、姓名。

    (1)根据上述语义画出E-R图;

    (2)将该E-R模型转换为关系模型; (要求:1:1和1:n的联系进行合并)

    (3)指出转换结果中每个关系模式的主码和外码。

    答案:

    (1)本题的E-R图如下图所示。

     

     

    (2)转化后的关系模式如下:

    工厂(工厂编号,厂名,地址)

           产品(产品编号,产品名,规格)

             职工(职工号,姓名,工厂编号,聘期,工资)

             生产(工厂编号,产品编号,计划数量)

        (3)每个关系模式的主码、外码如下:

           工厂:主码是工厂编号,无外码;

             产品:主码是产品编号,无外码;

             职工:主码职工号,外码是工厂编号;

             生产:主码是(工厂编号,产品编号),

                   外码是工厂编号、产品编号。

    展开全文
  • 电商数据库设计 mysql 数据库设计规范

    生产环境如下

    MySql 版本 MySql 5.7
    图形管理工具Navicat
    Linux 系统

    项目说明

    电商的基本模块有如下几个, 按照用户使用的流程

    Created with Raphaël 2.1.0用户登录选购商品加入购物车检查库存提交订单货到付款?发货订单付款yesno

    通过流程图 , 我们需要设计以下几个模块

    模块 模块说明
    用户模块 完成用户注册和登录验证
    商品模块 前后台商品管理和浏览
    订单模块 订单及购物车的生成和管理
    仓配模块 仓库库存和物流管理

    接下来就是数据库设计, 先说一说数据库的设计规范

    在实际工作中,一般情况下,各个公司都有自己的数据库设计规范,在遵循公司内部规范的同时,我们还有业内共识通用的设计规范,在此,就本次的电商数据库设计,说明以下部分规范.这个规范也同样适用与大部分业务的数据库设计.

    数据库命名规范

    • 所有的数据库对象名称必须使用小写字母并使用下划线分割(mysql 数据库对大小写敏感)
    • 所有数据库对象名称禁止使用MySqL保留关键字 eg. from关键字
    • MySQL关键字查询
    • 数据库对象的命名要见名之意 , 最好不要超过32个字符.
    • 数据库操作的时候 ,总会导入导出表 , 有一些临时表 , 临时表的最好以tmp为前缀并且以日期为后缀
    • 备份表的命名, 最好以bak为前缀并且以日期为后缀
    • 所有存储相同数据的列名和列类型必须一致

    数据结构基本设计规范

    • 所有的表必须使用Innodb存储引擎
      MySQL5.6 以后 Innodb 引擎成了默认的存储引擎 . 支持事务,行及锁,有更好的恢复性,高并发下性能好

    • 数据库和标的字符集统一使用UTF-8
      MySQL UTF-8字符集汉子占3个字节 , ASSIC占1个字节

    • 所有的表和字段都要添加注释

    • 尽量控制单表数据量的大小 , 尽量在500万行以内
      如果必须超过这个量 , 一般采用历史数据归档(eg. 日志类表) , 分库分表(主要是业务数据)等方式.

    • 尽量做到冷热数据分离,减小表的宽度
      这样做的目的是较少磁盘的IO , 保证热数据的内存缓存命中率
      利用更有效的利用缓存,避免读入更无用的冷数据(少使用 select *)
      经常使用的列放到一个表中

    • 禁止在表中建立预留字段
      很难做到见名之意
      无法确认存储的数据类型.
      对预留字段进行修改时,会对表造成锁定

    • 禁止在数据库中存储图片, 文件等二进制数据 .

    • 禁止在线上数据库做数据库压力测试

    • 禁止从开发环境,测试环境直连生产环境数据库
      否则很容易造成数据库污染

    数据库索引设计规范

    • 限制每张表的上的索引数量 , 建议单张表索引不超过 5 个

      • Innodb是按照主键的顺序来组织表的
      • 不使用更新频繁的列作为主键 , 不使用多列主键
      • 不使用UUID , MD5 , HASH , 字符串列作为主键
      • 主键建议使用自增ID使用主键
    • 常见索引列建议

      • select ,update , delete 语句中的where 从句中的列
      • 包含在order by ,group by ,distinct 中的字段
      • 多表JOIN的关联列
    • 如何选择索引列的顺序
      • 区分度最高的列放在联合索引的最左侧(主键, 唯一索引列)
      • 尽量把字段长度最小的列放在联合索引的最左侧
      • 使用频繁的列放到最左侧

    数据字段设计规范

    • 优先选择符合存储需要的最小的数据类型

      • 将字符串转化为数字类型存储 INET_ATON('255.255.255.255') = 429467295 IETN_NTOA(429467295) = '255.255.255.255'
      • 对于非负整数来说, 优先使用无符号整型
      • MySQL 中 varchar(n) 这里的n 代表的是字符数 , 不是字节数 ,varchar(255) 可以存 255 个汉字 , 需要占用 765 个字节
      • 过大的长度会消耗更多的内存
    • 避免使用 TEXT , BLOB数据类型

      • 如果必须使用 , 将BLOB或者是TEXT列分离到单独的扩展表
    • 避免使用 ENUM数据类型

    • 尽可能把列定义为 NOT NULL

    • 使用 timestamp 或者datetime 类型存储时间

      • timestamp 存储时间 范围 为 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07

      • timestamp 区间不够, 使用datetime 存储

    • 同财务相关的金额类数据 , 必须使用 decimal 类型

      • decimal 类型为精准浮点数 , 在计算时不会丢失精度

    数据库SQL开发规范

    • 充分使用表已经存在的索引查询

      • 使用left join 或者 not exists 优化 not in 操作
    • 禁止使用 select * 查询

      • 会消耗更多的cpu 和io 以及网络带宽资源
      • 无法使用覆盖索引
      • 可较少表结构变更带来的影响
    • 禁止使用不含字段列表的 insert 语句

    • 避免使用子查询 , 可以把子查询优化 join 操作

      • 子查询结果集无法使用索引
      • 子查询会产生临时表操作 , 如果子查询数据量大则严重影响效率
    • 避免使用 join 关联太多的表

      • 建议不超过 5 个
    • 减少同数据库的交互次数

      • 数据库更适合处理批量操作
    • 使用 in 代替 or

    • 禁止使用 order by rand () 进行随机排序

    • where 从句中禁止对列进行函数转换和计算

      • where date(createtime) = ‘20170101’ (禁止这样)
      • 上面的可以这样改 where createtime >='20170101' and createtime <'20170102'
    • 再明显不会有重复值时 使用 union all 而不是 union

    • 拆分复杂的大 sql 为多个 小 sql

    数据库操作行为规范

    • 超过 100 万行的批量写操作 ,要 分批分次进行操作

    • 禁止为程序使用的账号赋予super 权限

    • 对于程序连接数据库账号 , 遵循权限最小原则

      • 程序使用数据库账号只能在一个DB下使用 , 不准跨库
      • 程序使用的账号原则上不准有 drop 权限
    展开全文
  • 个人博客数据库设计

    万次阅读 多人点赞 2019-01-21 11:41:23
    文章目录前言一、 概述及分析1.1 项目背景1.2 分析1.3 系统功能1.3.1 用户管理1.3.2 博文管理1.3.3 评论管理1.3.4 分类管理1.3.5 标签管理二、数据库概念模型设计—基本ER图三、数据库逻辑模型设计四、数据库语句4.1...

    前言

    最近要做数据库大作业,在思考了很久之后,还是设计一个简单的个人博客数据库,数据库采用的时MySQL5.7。

    数据库下载(提取码: s2f9)

    一、 概述及分析

    1.1 项目背景

    随着互联网的发展,越来越多的人拥有了自己的个人博客。但是大多数采用的是网上别人做好的博客模板,众所周知,网上的模板并不是单独为个人而定制,而是面向大多数人的,独立设计一个博客,满足自己的需求。

    1.2 分析

    • 系统主要完成以下几方面的功能:
    • 用户管理:用户的注册和登录,发表博文和评论。
    • 博文管理:用户可以在网站中发表和设置博文。
    • 评论管理:用户可以评论博文和回复其他用户的评论。
    • 分类管理:添加和删除分类,给文章设置分类。
    • 标签管理:添加和删除标签,给文章设置标签。

    1.3 系统功能

    1.3.1 用户管理

    用户的相关信息如下:用户ID、用户IP、用户名、用户昵称、用户密码、用户邮箱、用户头像、注册时间、用户生日、用户年龄、用户手机号。

    用户注册时需提供用户名、用户密码、用户邮箱或用户手机号。

    用户登录时可以采用用户名或邮箱或手机号进行登录。

    用户可以发布博文、发表评论、回复,还可以添加其他用户为好友。

    1.3.2 博文管理

    博文的相关信息如下:博文ID、发布日期、发表用户、博文标题、博文内容、点赞数、回复数、游览量。

    博文可以被普通用户发布、修改、删除和评论,但修改和删除仅限于自己发表的动态。

    博文发布时需要设置分类、标签。

    1.3.3 评论管理

    评论的相关信息如下:评论ID、评论日期、点赞数、发表用户、评论文章ID、评论内容、父评论ID。

    评论可以被用户发表和删除以及被其他用户回复。

    1.3.4 分类管理

    分类的相关信息如下:分类ID、分类名称、分类别名、分类描述、父分类ID。

    只有管理员可以添加、删除、修改分类。

    分类的作用不仅可以将文章分类,还可以作为博客的菜单。

    1.3.5 标签管理

    标签的相关信息如下:标签ID、标签名称、标签别名、标签描述。

    用户发表文章时可以设置标签,标签不仅可以将文章分类,还可以作为博客的菜单。

    二、数据库概念模型设计—基本ER图

    三、数据库逻辑模型设计


    四、数据库语句

    4.1 建立数据表语句(部分)

    CREATE TABLE `zj_users` (
    
     `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    
     `user_ip` varchar(20) NOT NULL COMMENT '用户IP',
    
     `user_name` varchar(20) NOT NULL COMMENT '用户名',
    
     `user_password` varchar(15) NOT NULL COMMENT '用户密码',
    
     `user_email` varchar(30) NOT NULL COMMENT '用户邮箱',
    
     `user_profile_photo` varchar(255) NOT NULL COMMENT '用户头像',
    
     `user_registration_time` datetime DEFAULT NULL COMMENT '注册时间',
    
     `user_birthday` date DEFAULT NULL COMMENT '用户生日',
    
     `user_age` tinyint(4) DEFAULT NULL COMMENT '用户年龄',
    
     `user_telephone_number` int(11) NOT NULL COMMENT '用户手机号',
    
     `user_nickname` varchar(20) NOT NULL COMMENT '用户昵称',
    
     PRIMARY KEY (`user_id`),
    
     KEY `user_name` (`user_name`),
    
     KEY `user_nickname` (`user_nickname`),
    
     KEY `user_email` (`user_email`),
    
     KEY `user_telephone_number` (`user_telephone_number`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_articles` (
    
     `article_id` bigint(255) NOT NULL AUTO_INCREMENT COMMENT '博文ID',
    
     `user_id` bigint(20) NOT NULL COMMENT '发表用户ID',
    
     `article_title` text NOT NULL COMMENT '博文标题',
    
     `article_content` longtext NOT NULL COMMENT '博文内容',
    
     `article_views` bigint(20) NOT NULL COMMENT '浏览量',
    
     `article_comment_count` bigint(20) NOT NULL COMMENT '评论总数',
    
     `article_date` datetime DEFAULT NULL COMMENT '发表时间',
    
     `article_like_count` bigint(20) NOT NULL,
    
     PRIMARY KEY (`article_id`),
    
     KEY `user_id` (`user_id`),
    
     CONSTRAINT `zj_articles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `zj_users` (`user_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_comments` (
    
     `comment_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '评论ID',
    
     `user_id` bigint(20) NOT NULL COMMENT '发表用户ID',
    
     `article_id` bigint(20) NOT NULL COMMENT '评论博文ID',
    
     `comment_like_count` bigint(20) NOT NULL COMMENT '点赞数',
    
     `comment_date` datetime DEFAULT NULL COMMENT '评论日期',
    
     `comment_content` text NOT NULL COMMENT '评论内容',
    
     `parent_comment_id` bigint(20) NOT NULL COMMENT '父评论ID',
    
     PRIMARY KEY (`comment_id`),
    
     KEY `article_id` (`article_id`),
    
     KEY `comment_date` (`comment_date`),
    
     KEY `parent_comment_id` (`parent_comment_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_labels` (
    
     `label_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标签ID',
    
     `label_name` varchar(20) NOT NULL COMMENT '标签名称',
    
     `label_alias` varchar(15) NOT NULL COMMENT '标签别名',
    
     `label_description` text NOT NULL COMMENT '标签描述',
    
     PRIMARY KEY (`label_id`),
    
     KEY `label_name` (`label_name`),
    
     KEY `label_alias` (`label_alias`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_set_artitle_label` (
    
     `article_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文章ID',
    
     `label_id` bigint(20) NOT NULL,
    
     PRIMARY KEY (`article_id`),
    
     KEY `label_id` (`label_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_set_artitle_sort` (
    
     `article_id` bigint(20) NOT NULL COMMENT '文章ID',
    
     `sort_id` bigint(20) NOT NULL COMMENT '分类ID',
    
     PRIMARY KEY (`article_id`,`sort_id`),
    
     KEY `sort_id` (`sort_id`)
    
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_sorts` (
    
     `sort_id` bigint(20) NOT NULL COMMENT '分类ID',
    
     `sort_name` varchar(50) NOT NULL COMMENT '分类名称',
    
     `sort_alias` varchar(15) NOT NULL COMMENT '分类别名',
    
     `sort_description` text NOT NULL COMMENT '分类描述',
    
     `parent_sort_id` bigint(20) NOT NULL COMMENT '父分类ID',
    
     PRIMARY KEY (`sort_id`),
    
     KEY `sort_name` (`sort_name`),
    
     KEY `sort_alias` (`sort_alias`)
    
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `zj_user_friends` (
    
     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标识ID',
    
     `user_id` bigint(20) NOT NULL COMMENT '用户ID',
    
     `user_friends_id` bigint(20) NOT NULL COMMENT '好友ID',
    
     `user_note` varchar(20) NOT NULL COMMENT '好友备注',
    
     `user_status` varchar(20) NOT NULL COMMENT '好友状态',
    
     PRIMARY KEY (`id`),
    
     KEY `user_id` (`user_id`)
    
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    

    4.2 建立视图(部分)

    某用户的所有好友视图:

    CREATE VIEW Friends
    AS
    SELECT
    zj_user_friends.user_id AS user_id,
    zj_users.user_name AS user_name,
    zj_user_friends.user_friends_id AS user_friends_id,
    zj_user_friends.user_note AS user_note
    FROM
    (
    zj_users
    JOIN zj_user_friends
    )
    WHERE
    (
    zj_users.user_id = zj_user_friends.user_id
    ) ;
    

    五、 小结&参考资料

    小结

    数据库的设计不是很简单,一个产品除了满足用户需求,数据库的架构是非常重要的,之前做的一个志愿网站,虽然功能不是很好,基本需求能满足,但是数据库完全没有设计,没有处理,导致数据处理很糟糕。

    现在这个数据爆炸的网络时代,数据的处理及数据库的设计显得尤其重要,数据库设计师工作量也不亚于前后端工程师。

    参考资料

    展开全文
  • 数据库设计三大范式

    万次阅读 2016-10-20 21:59:49
    数据库设计三大范式  为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须...
  • 前言通常情况下,可以从两个方面来判断数据库设计的是否规范: 1)一是看看是否拥有大量的窄表 窄表往往对于OLTP比较合适,符合范式设计原则 2)宽表的数量是否足够的少。 所谓的宽表就是字段比较多的表,包含...
  • 数据库设计(一)——数据库设计

    万次阅读 多人点赞 2018-08-30 17:30:34
    一、数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段:  A、系统需求分析阶段 B、概念结构设计阶段 C、逻辑结构设计阶段 D、物理结构设计阶段 E、数据库实施阶段 F、数据库运行与维护阶段 需求分析...
  • 数据库设计概述

    千次阅读 2020-11-09 09:23:52
    数据库设计是一个不断反复、逐步完善的过程,属于软件工程范畴。 数据库设计由6个阶段组成: (1)需求分析阶段       - 任务:由系统分析员和用户一起来分析用户的要求,以书面的形式...
  • 1、UUID mysql生成uuid: SELECT UUID(); UUID主键的好处: UUID主键的缺点: 2、主键自动增长 分布式情况下的主键可以采用第三方组件,如MyCat等。 ......
  • 数据库设计的基本步骤

    万次阅读 多人点赞 2017-08-13 20:52:16
    数据库设计的基本步骤 按照规范设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段 1.需求分析 2.概念结构设计 3.逻辑结构设计 4.物理结构设计 5.数据库实施 6.数据库的运行和维护   在...
  • 数据库系统原理 - - (3)数据库设计

    万次阅读 2020-07-03 08:55:25
    数据库设计概念1)数据库的生命周期2)数据库设计的目标3)数据库设计的内容4)数据库设计的方法a. 直观设计法b.规范设计法c.计算机辅助设计法5)数据库设计的过程2.数据库设计的基本步骤1)需求分析需求分析的四个...
  • rbac数据库设计

    万次阅读 2016-05-21 20:37:50
    1 rbac数据库设计RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制分享牛原创,分享牛系列,分享牛。rbac 用户角色权限资源表如何设计呢?下面开始表的设计。RBAC表结构。1.1 ...
  • 数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须...
  • 数据库设计范式

    千次阅读 2020-01-31 20:53:09
    数据库设计范式
  • 数据库设计——评论回复功能

    万次阅读 多人点赞 2017-05-03 02:43:48
    本文主要介绍评论功能的数据库设计。评论功能最主要的是发表评论和回复评论(删除功能在后台)。评论功能的拓展功能体现有以下几方面: (1)单篇文章的评论数量和信息展示; (2)从时间维度,按照时间倒
  • 学生成绩管理系统数据库设计--MySQL

    万次阅读 多人点赞 2020-06-18 13:02:04
    MySQL/SQL Server 数据库设计(学生成绩管理系统) 设计大纲 1. 项目背景及需求分析 1.1 项目背景 1.2 需求分析 1.2.1 信息需求 1.2.2 功能需求 1.2.3 安全性与完整性需求 2. 概念结构设计 2.1 抽象出系统实体 2.2 ...
  • 数据库设计总结

    万次阅读 多人点赞 2018-04-08 23:43:12
    对于一个系统,数据库的设计是非常重要的,数据库设计决定了以后数据好不好维护。后期需求好不好展。同时也决定了系统的性能。一个坏的数据库设计一个功能点的改动可能会设计多张表的改动。一不小心可能就会引起数据...
  • 数据库设计原则

    千次阅读 2019-06-09 09:52:33
    一,数据库设计原则 1. 原始单据与实体之间的关系  可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,它们可能是一对多或多对一的...
  • MYSQL数据库设计数据库设计实例(二)
  • 数据库设计的一般步骤

    万次阅读 多人点赞 2019-06-13 20:03:58
    经过几天给韶关某个高校进行数据库设计的实训,对数据库设计的过程有了更加深刻的理解。 数据库的设计按照以下步骤: (1)了解功能需求 在设计数据库之前,设计人员必须要先了解系统的功能需求。这里可以通过...
  • 数据库设计之物理结构设计

    万次阅读 多人点赞 2018-07-03 10:58:59
    为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。 一、数据库的物理设计 确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。 对物理结构进行评价,...
  • Oracle 数据库设计-数据库表设计

    千次阅读 2018-11-01 21:22:57
    数据库设计中,我的工作中经常会分析怎样商业逻辑中的表格如何设计。再设计表的关系之前 需要先了解关系型数据库特点 1、关系型数据库,是指采用了关系模型来组织数据的数据库; 2、关系型数据库的最大特点就是...
  • 点赞 数据库设计

    千次阅读 2017-02-13 20:30:10
    点赞功能 数据库设计
  • 数据库设计思路

    千次阅读 2019-10-31 15:26:20
    数据库设计追求逐渐完善,不求一下子完美
  • 员工管理数据库设计

    万次阅读 多人点赞 2019-07-06 20:56:52
    通过该课题可以熟悉PowerDesigner设计数据库的流程,巩固数据库设计规则和设计原理,以及对数据库进行多种逻辑查询。 二、数据库的需求分析 通过设计数据库实现对企业员工的基本信息、职...
  • 数据库设计评审

    千次阅读 2014-03-10 09:45:19
    数据库null存储integer脚本扩展 序号 检查项目 ...数据库设计是否满足软件设计的一般要求?... 注:数据库设计应该满足软件设计的一般要求。       2
  • 关系数据库设计理论

    千次阅读 2018-07-11 18:32:27
    关系数据库设计理论 设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题) 数据库逻辑设计主要解决的问题 关系数据库应该组织成几个关系模式 关系模式中包括哪些属性 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,377,698
精华内容 551,079
关键字:

属于数据库设计的是