这是标题(要在5~100个字之间)

文章探讨了需求分析在项目设计中的重要性,区分显性与隐性需求,以今日头条为例说明需求演进。随后介绍了项目概要设计,包括技术选型、角色行为规约和功能模块划分。还详细阐述了数据库分析,如实体设计、ER模型和接口文档编写的目的与实践。
摘要由CSDN通过智能技术生成

一、需求分析

问:需求分析,分析谁的需求?
答:分析用户的需求。
用户需求,就是用户对产品功能的需求,例如:
用户可以删除评论;
商家可以自己设置推荐商品;
用户可以点赞商店;

而互联网产品正是由一个个用户所需要的产品功能组合而成。

显性需求:也叫基本需求,是用户自己明确感受并可以用语言描述的。当用户的显性需求被满足时,用户一般不会兴奋或惊喜,而不被满足时,用户则会产生抱怨;
隐性需求:也叫兴奋需求,是用户不能完全清晰感受和用语言描述的。用户的隐性需求被满足时,用户一般会兴奋或惊喜,而不被满足时,用户也不会产生抱怨。隐性需求可以增加用户粘性。

我们以“今日头条”这款产品为例:最初用户的需求可能只是“浏览新闻和资讯”,但在用户不断深入的过程中,用户却产生了更多的需求——从单纯的“想要获知信息”慢慢地对这个平台产生依赖。当一款新闻产品慢慢被赋予“打发时间”、“消磨时间”的娱乐性质后,用户黏性自然就提高了。
 

所以,为了设计一个项目,我们需要分析用户的需求,分析出项目应该实现的功能点。
例如:对于“用户可以管理自己发布的评论”这个功能,我们可以得到项目应该实现以下功能点:
用户可以查看自己发布过的评论;
用户可以修改评论;
用户可以删除评论;

二、简单的项目概要设计

技术选型。
一般技术选型是在用户需求分析之后才做的,可以理解为先分析要做什么,再分析怎么做。咱们当前阶段还不需要进行技术选型,后期大家学习到了更多的技术后再结合实际情况进行技术选型

1.根据用户需求,分析出不同角色行为,形成角色行为规约。

点餐系统(在店铺点餐):

用户分为:店家(管理员),顾客

用户作为店家的行为:
新增 / 修改 / 删除菜品
管理顾客订单
修改折扣优惠

用户作为顾客的行为:
查看菜品
创建 / 删除 / 修改订单
订单支付
发布 / 删除评论

2.将系统划分为几个功能模块,如果可以的话,画出系统的功能结构图。

用户端:
登录
查看菜品(分页):
查看菜品列表:按照主食、配菜、饮料等等分类查看
查看菜品详情:名称、价格、图片,评论

创建 / 修改订单:
可以在订单新增菜品,修改菜品数量,填写备注

订单支付:
选择微信、支付宝支付

----------------------------------------

(店家)管理员端
管理菜品(分页):
修改、删除、增加菜品信息(名称、图片,价格,描述等)

管理订单:
查看订单列表:按照时间、餐位、订单价格分类查看
查看订单详情:查看创建时间,餐位序号、菜品列表,备注
删除订单

修改折扣优惠:
修改折扣条件(例如,客户总消费次数>10 or 订单价格>500)
修改折扣额度
修改折扣有效时间

3.后端对角色行为规约进行扩展,并对原型部分不合理的部分前后端进行商榷。分析系统中的不同对象之间的关系,形成实体,进一步组织成数据库文档。(见第三部分)
4.分析前后端交互的功能,编写接口文档。(见第四部分)

三、数据库分析

1.需求分析设计
现在我们想要设计一个山寨版的B站。
1)总体需求
        用户分为3个角色:游客、用户、管理员
根据角色进行任务分类:
        1.游客可以不登陆,正常浏览视频,文章,搜索用户、文章、视频
        2.用户除了拥有游客的权限以外,还可以投币作品;发布、管理自己发布的作品
        3.管理员可以审核作品,板块以及对用户审核,可以封禁\解封作品、用户、板块。
2)系统功能设想

 

2. 概念结构设计

1)实体定义
实体有:用户,管理员,作品、板块
实体间联系:
板块 - 作品:多对多,一个板块可以有多个作品,一个作品也可以属于多个板块
用户 - 作品:一对多,一个用户主可以拥有多个作品,但是一个作品不可以被多个用户拥有

2)数据库ER模型

实体属性图

在这里插入图片描述

在这里插入图片描述 

在这里插入图片描述 

实体联系图

在这里插入图片描述 

3. 逻辑结构设计 

1)关系模型
用户(主键id,用户名,密码,性别,硬币数量,用户状态码)
作品(主键id,题目,内容,发布时间,用户外键,硬币数量,简介,作品状态码)
板块(主键id,名称,简介,创建时间,板块状态码)
归属(主键id,作品外键,板块外键)

2.)数据库关联关系

  1. 外键约束1(用户 - 作品)tb_article表中的user_id对tb_user中的id进行参照,形成两表的关联,表示用户和作品一对多的关系
  2. 外键约束2(用户 - 作品)tb_article_plate表中的article_id对tb_article中的id进行参照,tb_article_plate表中的plate_id对tb_plate中的id进行参照,两个外键约束形成了作品和板块的多对多的关系

3)数据表逻辑设计

        1.用户表逻辑设计

      

主键id用户名密码性别硬币数量用户状态码

         2.   作品表逻辑设计

      

主键id题目内容发布时间用户外键硬币数量简介作品状态码

         3.板块表逻辑设计

        

主键id名称简介创建时间板块状态码

         4.归属表逻辑设计

        

主键id作品外键板块外键

4. 物理结构设计      

1)确定数据库的物理结构
        1.确定数据库管理系统及其宿主语言
        数据库管理系统使用的是MySQL8.0
        宿主语言使用的是结构化查询语言SQL

        2.定义数据库、表及字段的命名规范
                1.数据库命名全小写
                2.表命名全小写,以tb_开头,以下划线分割单词
                3.字段全小写,以下划线来分割单词

        3.选择合适的存储引擎
        鉴于InnoDB 存储引擎以下几个优点:
        1.在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力
        2.InnoDB 存储引擎可以有效地降低由于删除和更新导致的锁定
        3.可以确保事务的完整提交(Commit)和回滚(Rollback)
        4.支持外键、Hash索引和B+树索引
        并且考虑到该系统以下的几个特点:
        每一张表都涉及增删改查操作
        对数据一致性和事务一致性要求较高
        因此,采用InnoDB作为存储引擎
        4. 为表中的字段选择合适的数据类型
        选取原则:1.当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期和二进制类型,最后是字符类型。2.对于相同级别的数据类型,应该优先选择占用空间小的数据类型
例:

数字类型:


 

 日期类型:

 字符串类型:

5.建立数据库物理结构 

  • 用户信息表tb_user
  • 作品表tb_article
  • 板块表tb_plate
  • 归属表(作品板块关系表)tb_article_plate

对物理结构的解释:

字段数据类型的选择原因:

  1. 主键均采用int类型,并且为自增的。原因是为了防止聚簇索引B+树结构的大规模重构,避免不必要的性能损耗。
  2. 状态码均采用tinyint类型,状态码通常就是使用数字来表示状态的,不需要占用不必要的存储空间,一个字节无符号的存储足够了
  3. 金钱采用decimal类型,涉及到金钱的存储要使用decimal类型,这种类型精度较高,不能采用double类型,会有精度损失
  4. 密码采用char类型,因为char类型对于定长的数据存储检索速度更快,密码使用MD5进行加密存储
  5. 除内容和密码其他需要使用字符串类型进行存储的都使用varchar类型,varchar存储的是可变字符串,除了可节省存储空间外,存取硬盘时也会较有效率。
  6. 发布时间使用的是timestamp类型,timestamp会根据元组更新自动更新时间,适合记录数据修改的时间,而datetime不会随着该元组信息修改而进行更新,更加适合记录数据的初始创建时间,因此不采用datetime,而使用timestamp类型

6.数据库实施

使用navicat

四、接口文档

一、什么是接口文档?
在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。

二、为什么要写接口文档?
1、项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发
2、项目维护中或者项目人员更迭,方便后期人员查看、维护
三、接口文档设计 接口文档

五、复习使用natapp及项目部署

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,请稍等我一下,我会逐步回答你的问题。 首先,让我们来回答你的第一个问题,使用Python定义x变量为随机生从20到100之间100个数据,y变量为5x2-1。下面是代码实现: ```python import random x = [random.randint(20, 100) for _ in range(100)] y = [5 * i ** 2 - 1 for i in x] ``` 这里使用了Python内置的random模块,使用randint()函数随机生成20到100之间的整数,生成了长度为100的x列表,然后根据y = 5x^2-1的公式,生成了长度为100的y列表。 接下来,让我们回答你的第二个问题,使用Matplotlib库绘制x和y的散点图,颜色为黄色,标题为"y=5x^2-1"。下面是代码实现: ```python import matplotlib.pyplot as plt plt.scatter(x, y, c='yellow') plt.title("y=5x^2-1") plt.show() ``` 这里使用了Matplotlib库的scatter()函数,绘制了x和y的散点图,设置了颜色为黄色,设置了图表的标题为"y=5x^2-1"。 接下来,让我们回答你的第三个问题,使用Pandas库绘制x和y的散点图,颜色为黄色,标题为"y=5x^2-1"。下面是代码实现: ```python import pandas as pd df = pd.DataFrame({'x': x, 'y': y}) df.plot.scatter(x='x', y='y', c='yellow', title='y=5x^2-1') ``` 这里使用了Pandas库的DataFrame()函数,创建了一个包含x和y的DataFrame对象,然后使用plot.scatter()函数绘制散点图,设置了颜色为黄色,标题为"y=5x^2-1"。 接下来,让我们回答你的第四个问题,使用Seaborn库绘制x和y的散点图,颜色为黄色,标题为"y=5x^2-1"。下面是代码实现: ```python import seaborn as sns df = pd.DataFrame({'x': x, 'y': y}) sns.scatterplot(x='x', y='y', data=df, color='yellow').set_title('y=5x^2-1') ``` 这里使用了Seaborn库的scatterplot()函数,绘制了x和y的散点图,设置了颜色为黄色,设置了图表的标题为"y=5x^2-1"。 最后,让我们回答你的第五个问题,随机生成五组1-100之间的20个数据,计算他们的相关系数矩阵,并绘制热力图,显示数和保留2位小数,数大小为8及体颜色为白色。下面是代码实现: ```python import numpy as np # 随机生成5组长度为20的数据 data = np.random.randint(1, 100, size=(5, 20)) # 计算相关系数矩阵 corr_matrix = pd.DataFrame(data).corr() # 绘制热力图 sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', annot_kws={"size": 8, "color": "w"}) plt.show() ``` 这里使用了Numpy库的random模块,生成了一个5行20列的随机矩阵。然后使用Pandas库的DataFrame()函数将矩阵转化为DataFrame对象,使用corr()方法计算得到相关系数矩阵。最后使用Seaborn库的heatmap()函数绘制热力图,设置了注释为保留2位小数,体大小为8,体颜色为白色,颜色映射为coolwarm。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值