[关闭]
@SovietPower 2022-04-29T10:19:52.000000Z 字数 4474 阅读 686

数据库 项目要求

DB



sql

  1. 景点(景点ID,名称,省,市,区,门牌号,类型,多张图片,介绍,开放时间,等级)
  2. 景点卡片(景点ID,用户ID,卡片ID,图片,评分,点赞量)
  3. 评价(卡片ID,评论,序号,时间)
  4. 用户(用户ID,用户名,密码,性别,年龄,省,市,区)
  5. 关注(被关注者ID ,关注者ID
  6. 景点: scenery (scenery_id, scenery_name, province, city, district, street, pictures, intro, open_time, level, tag_id)
  7. 景点标签: scenery_tag (tag_id, tag)
  8. 景点卡片: scenery_card (card_id, scenery_id, user_id, picture, score, likes, title, create_at)
  9. 评价: comment (card_id, comment_id, comment, comment_time)
  10. 用户: user (user_id, user_name, password, gender, age, province, city, district)
  11. 关注: follow (follower_id, followee_id)

发表景点卡片

  1. insert into scenery_card (scenery_id, user_id, pictures, score, likes, title, create_at)
  2. values([scenery_id], [user_id], [picture], [score], 0, [title], time.Now());

匹配景点
同搜索

  1. select * from scenery
  2. where 省市区匹配 and ([keyword] in scenery_name or scenery_name in [keyword]);

查看某用户的卡片

  1. select * from scenery_card
  2. where user_id = [user_id];

删除某个卡片
后端先检查是否为自己的卡片

  1. select user_id from scenery_card
  2. where card_id = [card_id];
  1. delete from scenery_card
  2. where card_id = [card_id];

推送地址附近的卡片
同搜索。要先查该用户的地址
todo:一次只返回一定数量的记录。每次查询应有随机性。

  1. with user_address(province, city, district) as
  2. (select province, city, district from user
  3. where user_id = [user_id])
  4. select *
  5. from scenery natural join user_address;

推送关注用户的卡片
todo:一次只返回一定数量的记录。每次查询应有随机性。

  1. select * from scenery_card
  2. where user_id in
  3. (select followee_id from follow
  4. where follower_id = [user_id])

查看某用户的卡片

查看某用户的卡片



用户 (用户ID,名称,性别,年龄,星座,省,市,区,粉丝数,关注数)
关注(粉丝ID被关注人ID,关注时间)
景点卡片(景点ID,图片,地址,评级,评分)
景点(景点ID,多张图片,介绍,开放时间,优惠政策,标签)
评价(评价ID,景点ID,用户ID,是否为分享,评价时间,评分,内容,图片,点击数,点赞数)
对评价的评论(评价ID评论ID,用户ID,评论时间,评论内容)

功能

如何推荐关注博主的分享?不重复?如何与其他推荐排序?

用户密码(用户ID,密码密文)

评级是4A 5A这种,评分是用户给分平均

用户访问关键词(用户ID,关键词ID,访问次数)

分享和评价有关系吗,分享后自动评价?那分享需要记录内容吗,还是指向一个评价ID

热度怎么实现呢
可能是每个景点,都会存每个月被访问了多少次,热度就是 (当月访问数+上月访问数)/两个月总访问数。每个月每个景点新增一条记录。
可能最好是每天存一个,用近多少天,但数据好像会很大。
而且我们 没有这个数据(不过去哪儿有热度,虽然很多都是0),也很难展示它的变化,因为周期很长。

XSS 攻击或 SQL 注⼊

主观

做什么,能做哪些页面和功能,页面的设计及之间的逻辑
能否设计出更复杂的询问(就是不是三四行简单sql就可以解决的)?
数据集怎么获取
期望目标(简单的信息查询,还是功能比较完整的网站;是否添加更复杂但有用的功能或组件)
使用哪些工具

前端页面的整体风格,要不要参考已有的网站,或者是否使用已有的东西比如ElementPlus
是否使用界面设计工具
是否用那种特别常见但很简单的框架,比如Vue Element AdminGin Vue Admin

是否需要review
是否用git

简单的代码规范

文件名格式(和函数相同 大写开头+驼峰?)
目录结构
缩进使用tab(4空格长度)?
函数名称:简洁的动词+名词(+修饰/补充)?如get/update/create/edit/modify/delete+名词

前端

URL格式(router\index.js

代码格式:
js大括号是否换行?
简单标签、空标签一行内写完
复杂标签每个属性一行,
标签内的每层标签一缩进
(如果直接用vscode的自动补全,应该就是这样)

每个主要内容用一层块(一个div)
css标明一下主要路径

注释:
主要功能区空行,且用注释标明

比如:

  1. <!-- 步骤条 -->
  2. <div class="step-title step-title-unfinished" v-if="order.status==1">等待对方接收</div>
  3. <div class="step-title step-title-unfinished" v-else-if="order.status==2">待接收</div>
  4. <div class="step-title step-title-unfinished" v-else-if="order.status==3">未评价</div>
  5. <div class="step-title step-title-finished" v-else>已完成</div>
  6. <!-- 预计送达时间 -->
  7. <div class="evaluate-time" v-if="order.status==1||order.status==2">
  8. 预计送达时间:{{$filters.dateFormat(order.time)}}
  9. </div>
  10. <!-- 预计送达时间END -->
  11. <div class="step">
  12. <el-steps
  13. :space="200"
  14. :active="activeStep"
  15. finish-status="success"
  16. align-center
  17. >
  18. <el-step title="创建订单" :description="$filters.dateFormat(order.created_at)"></el-step>
  19. <el-step title="管理员确认并分配" :description="allocateDescription" v-if="activeStep!=1"></el-step>
  20. <el-step title="管理员确认并分配" v-else></el-step>
  21. <!-- 这里order应再加一个值allocated_at -->
  22. <el-step title="运输中"></el-step>
  23. <el-step title="订单送达" :description="$filters.dateFormat(order.updated_at)" v-if="activeStep==4"></el-step>
  24. <el-step title="订单送达" v-else></el-step>
  25. </el-steps>
  26. <div class="extra"></div>
  27. <div class="extra"></div>
  28. </div>
  29. <!-- 步骤条END -->
  30. <style scoped>
  31. /* 货车选择Drawer */
  32. .order-detail :deep() .el-drawer__body {
  33. overflow: auto;
  34. }
  35. .order-detail :deep() .el-table .el-table__cell {
  36. padding: 5px 0;
  37. font-size: 16px;
  38. }
  39. .order-detail .table-expand {
  40. font-size: 0;
  41. background-color: #f0fcff;
  42. }
  43. .order-detail .table-expand label {
  44. width: 90px;
  45. color: #99a9bf;
  46. }
  47. .order-detail :deep() .table-expand .el-form-item {
  48. margin: 0 0 0 25px;
  49. width: 50%;
  50. }
  51. /* 货车选择Drawer END */
  52. </style>

后端

命名:
对外公开的全局变量、函数名大写开头,只在该包内可用的小写开头
局部变量小写开头?
驼峰式?
名称内的特殊名词、缩写词大写,如userID, userAPI而不是userId, userApi

接口格式

我之前用的是基本格式是

  1. type Response struct {
  2. Status int `json:"status"` // 状态码
  3. Msg string `json:"msg"` // 状态信息
  4. Error string `json:"error"` // 错误信息(如果出错)
  5. Data interface{} `json:"data"` // 所需数据
  6. }

错误码及信息(constant\code.go msg.go

一些信息

项目名称
数据库名称、密码等

客观

1. 基本介绍
描述应用场景,场景背景,涉及哪些数据。
功能介绍。
项目特点。

2. 关系模式设计

3. 测试数据集

4. 界面

5. SQL语句(May 9)
有关数据库的处理逻辑(即SQL语句)。
在测试数据集上进行测试(test-sample.sql test-sample.out

6. 开发平台

7. 完整的生产数据集
足够大,如千个员工,百万条简单数据。

8. SQL测试(May 30)
在完整数据集上的SQL测试(test-production.sql test-production.out):是否正确,效率,相应时间。

10. 性能优化
建立索引,修改SQL语句等。

11. 美化界面(June 17)

参考

Vue

后端使用的基本框架:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注