数据库设计步骤--了解用户需求:拿出一个问题清单

本文深入探讨了在项目启动阶段,通过详细询问客户关于功能、数据需求、数据完整性、安全性及环境等问题,以确保项目目标与范围得到充分理解。包括功能实现、用户界面设计、响应时间、报表需求、数据处理流程、完整性约束、安全性策略、系统环境与现有系统交互等核心方面,为后续系统设计与开发奠定坚实基础。

项目一开始,就应该着手考虑询问客户哪些问题以便于更好地了解项目的目标和范围。

1.功能:

主要讨论期望系统实现什么功能还要涉及如何实现这些功能记录客户提出的系统应该如何工作的想法仍有用的。

系统应该实现什么功能?

构建此系统的原因是什么?你希望它究成哪些任务?

•系统应该呈现什么样的外观?大致绘出用户界面?

系统的不同部分分别需要多少响应时间(通常交互式响应时间应该小于5s,而报表和其他脱机活动可能花费更长的时间)?

需要什么样的报表?

最终用户是否需要定义新的报表?

髙级用户和管理员是否需要定义新的报表?

2.数据需求:

有助于弄清项目的数据需求。了解需要什么数据将有助于着手定义数据库中的表

用户界面需要什么数据?

应该从哪里获取数据?

这些数据段是如何关联的?

当前如何处理这些任务?数据来自何处?

3.数据完整性:

数据完整性,有助于定义将在数据库中构建的一些完整性约束

各个字段允许获取哪些值?

需要哪些字段(例如,客户记录是否需要电话号码?传真号呢?电子邮件地址呢?是其中的一项而不是所有项)?

各个字段的有效域(允许的值)是什么?允许什么样的格式,要求等?

哪些字段应该参照外键?(例如一个地址的State字段可能需要包含在States表中并且—个CustomerlD字段可能需要包含在Customers表中。我曾看到过带有很长的标准注释淸单的客户,并且Comments宁段只能取那些值)

在下订单之前是否需要客户记录?

若客户取消一个账户,是希望删除对应的记录?还是仅将它们标记为非活动的?

系统需要何种级别的可靠性?

是否需要全天候访问(24/7)系统?

数据的易失性如何?需要采用什么样的备份频率?

如果系统崩溃会带來多大的灾难?

需要多快的备份和运行速度?

如果发生系统崩溃丟失一些数据将会带来何种后果?

4.安全性:

安全性,有助于确定哪种数据库产品最佳(不同的产品提供不同形式的安全性)和使用何种体系结构

每个用户是否需要单独的口令?(通常是个好想法)

不同的用户是否需要使用不同的数据段?(例如售货员可能需要客户信用卡号码,但是订单履行技术员可能不需要)

数据库内的数据否需要加密?

是否需要提供审计线索来记录执行的每项操作和执行人?(例如可以查询哪个职员增加了订购最新iPod的客户的优先级,然后询问此店员这样做的原因)

有哪些不同类别的用户?

每类用户的数量将是多少?每次是否只允许一个人访问数据?是否拥有数百名乃至上千名用户(如同某些Web应用程序的情况那样)

现有的文档是否描述了用户的任务和职责?

5.环境

收集有关项目将替代或交互的其他系统和处理过程的信息。

该系统足增强还是替代现有的系统?

是否存在描述现有系统的文档资料?

现有的系统是否有可供调研的纸制表单?

需要现有系统中的哪些特性?不需要要哪些特性?

现有的系统使用何种类型的数据?存储的方式如何,以及不同的数据段的关联方式如何?

是否存在说明现有系统数据的文档?

是否存在此系统必须与之交互的其他系统?

它如何与这些系统确交互?

新项目是否问现有的系统发送数据?如何发送?

新项目是否从现有的系统接收数据?如何接收?

是否存在说明这些系统的文裆?

业务的运作方式如何








当然可以!推荐用 Python自带的 http.server (后端,不用装任何依赖)+  sqlite3 (数据库,自带)+ 简单HTML/JS(前端) 做一个“简易待办清单”——全程不用Flask,不用装任何额外库,Win7系统的Python 3.8天生支持,逻辑比留言板更简单,新手能快速上手。 核心优势 1. 零额外安装:后端用Python标准库( http.server + sqlite3 ),前端用浏览器自带的HTML/CSS/JS,不用装任何框架。 2. 逻辑极简:只做2个功能——“添加待办”+“显示所有待办”,前后端交互靠“表单提交”,不用复杂请求。 3. 文件极少:只需要2个文件(后端 server.py  + 前端 index.html ),结构清晰,新手好维护。 步骤1:项目文件结构(只有2个文件,放同一文件夹里) 新建一个文件夹(比如叫“简易待办”),里面放2个东西: -  server.py (后端:处理请求、存数据库-  templates 文件夹(前端页面放这里)→ 里面放 index.html (待办输入+显示页面) 步骤2:写后端代码( server.py ,复制就能用) 后端用 http.server 做简易服务器, sqlite3 存待办数据,不用任何第三方库: python # 后端:server.py(Python自带库,不用装任何东西) from http.server import BaseHTTPRequestHandler, HTTPServer import sqlite3 import cgi # 处理前端表单数据的工具(自带) # 1. 初始化数据库(自动建“待办表”,存待办内容+添加间) def init_db(): conn = sqlite3.connect('todo.db') # 数据库文件(和server.py同目录,Win7能正常生成) cursor = conn.cursor() # 建表:如果没有“todo_list”表,就新建(id自增,content待办内容,time添加间) cursor.execute(''' CREATE TABLE IF NOT EXISTS todo_list ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL, # 待办内容(不能为空) time TIMESTAMP DEFAULT CURRENT_TIMESTAMP # 自动记录添加间(不用前端传) ) ''') conn.commit() conn.close() # 2. 从数据库取所有待办(按间倒序,新的待办在上面) def get_all_todos(): conn = sqlite3.connect('todo.db') cursor = conn.cursor() cursor.execute('SELECT content, time FROM todo_list ORDER BY time DESC') todos = cursor.fetchall() # 取所有数据(格式:[(待办1, 间1), (待办2, 间2)]) conn.close() return todos # 3. 把新待办存到数据库 def save_todo(content): conn = sqlite3.connect('todo.db') cursor = conn.cursor() cursor.execute('INSERT INTO todo_list (content) VALUES (?)', (content,)) # 存待办内容 conn.commit() conn.close() # 4. 核心:处理浏览器的请求(GET请求:显示页面;POST请求:接收待办) class TodoHandler(BaseHTTPRequestHandler): # 处理“打开页面”的请求(比如浏览器输网址、刷新页面) def do_GET(self): init_db() # 每次打开页面先确保数据库表存在 todos = get_all_todos() # 取所有待办 # 读取前端HTML文件(从templates文件夹里读) with open('templates/index.html', 'r', encoding='utf-8') as f: html = f.read() # 把待办数据嵌入HTML(用{{todo_list}}做占位符,替换成实际待办) todo_html = '' for content, time in todos: # 格式化间(去掉秒后面的小数,更简洁) clean_time = time.split('.')[0] if '.' in str(time) else str(time) todo_html += f'<div class="todo-item">{content} <span class="time">{clean_time}</span></div>' # 替换HTML里的占位符,把待办列表嵌进去 html = html.replace('{{todo_list}}', todo_html) # 给浏览器返回HTML页面 self.send_response(200) # 状态码200:请求成功 self.send_header('Content-type', 'text/html; charset=utf-8') # 告诉浏览器是HTML self.end_headers() self.wfile.write(html.encode('utf-8')) # 把HTML发给浏览器 # 处理“提交待办”的请求(前端点“添加”按钮触发) def do_POST(self): # 接收前端表单提交的待办内容 form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': self.headers['Content-Type']} ) new_todo = form.getvalue('todo_content', '').strip() # 拿到待办内容(没填就为空) # 如果待办不为空,就存到数据库 if new_todo: save_todo(new_todo) # 存完后跳回首页(刷新页面,显示最新待办) self.send_response(302) # 302:重定向(让浏览器跳转到首页) self.send_header('Location', '/') # 跳转地址:首页(就是浏览器输的http://127.0.0.1:8000) self.end_headers() # 5. 启动后端服务器(端口8000,Win7能用) def run_server(): server_addr = ('', 8000) # 空字符串=本机,端口8000(不容易冲突) httpd = HTTPServer(server_addr, TodoHandler) print('后端已启动!打开浏览器访问:http://127.0.0.1:8000') print('要关闭服务器,按 Ctrl+C') try: httpd.serve_forever() # 一直运行,等待浏览器请求 except KeyboardInterrupt: httpd.server_close() print('服务器已关闭') # 运行后端(直接点Python运行按钮就能启动) if __name__ == '__main__': run_server()   步骤3:写前端代码( templates/index.html ,复制就能用) 前端只做“输入待办”和“显示待办”,样式简单,交互靠表单提交: html <!DOCTYPE html> <html> <head> <title>简易待办清单</title> <style> /* 简单样式,让页面不丑 */ body { font-family: 微软雅黑; max-width: 600px; margin: 50px auto; /* 页面居中 */ padding: 0 20px; } .title { text-align: center; color: #333; } /* 待办输入区 */ .input-area { margin-bottom: 30px; } #todo-input { width: 70%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; font-size: 16px; } #add-btn { padding: 10px 20px; background: #28a745; /* 绿色按钮 */ color: white; border: none; border-radius: 4px; font-size: 16px; cursor: pointer; } #add-btn:hover { background: #218838; /* 鼠标放上去变深绿 */ } /* 待办显示区 */ .todo-list { border-top: 1px solid #eee; padding-top: 20px; } .todo-item { padding: 10px; margin: 10px 0; background: #f8f9fa; border-radius: 4px; display: flex; justify-content: space-between; /* 待办内容和间左右分开 */ } .time { color: #6c757d; /* 间灰色 */ font-size: 14px; } /* 没待办的提示 */ .empty-tip { color: #6c757d; text-align: center; padding: 20px; } </style> </head> <body> <h1 class="title">简易待办清单</h1> <!-- 1. 待办输入表单:提交给后端(method=POST,地址=首页) --> <div class="input-area"> <form method="POST" action="/"> <input type="text" id="todo-input" name="todo_content" <!-- 后端用这个名字拿待办内容 --> placeholder="请输入待办(比如:买牛奶)" required <!-- 不能为空,浏览器会自动提示 --> > <button type="submit" id="add-btn">添加待办</button> </form> </div> <!-- 2. 待办显示区:后端会把{{todo_list}}替换成实际待办 --> <div class="todo-list"> {{todo_list}} <!-- 占位符:后端取到待办后,会把这里换成带样式的待办列表 --> <!-- 如果没有待办,显示提示 --> <div class="empty-tip" id="empty-tip" style="display: none;">还没有待办,快添加一个吧~</div> </div> <!-- 简单JS:如果没有待办,显示“空提示” --> <script> // 页面加载后,检查待办列表是否为空 window.onload = function() { const todoList = document.querySelector('.todo-list'); const emptyTip = document.getElementById('empty-tip'); // 如果待办列表里只有空提示(没实际待办),就显示空提示 if (todoList.innerHTML.trim() === '') { emptyTip.style.display = 'block'; } }; </script> </body> </html>   步骤4:运行项目(Win7下3步搞定,不用终端输复杂命令) 1. 确认文件路径:确保 server.py 和 templates 文件夹在同一目录, templates 里有 index.html (别放错!)。 2. 启动后端:用VS Code打开 server.py ,点击右上角的 绿色播放按钮(运行Python文件),VS Code会弹出“运行面板”,显示“后端已启动!打开浏览器访问:http://127.0.0.1:8000”。 3. 用待办清单- 打开浏览器,地址栏输 http://127.0.0.1:8000 ,按回车。 - 输入待办(比如“买牛奶”),点“添加待办”→ 页面刷新,待办会显示在下面,带添加间。 - 再添加一个(比如“写作业”),新待办会排在上面,自动按间倒序。 新手必看:为什么这个项目简单? 1. 后端不用学框架: http.server 是Python自带的“迷你服务器”,代码里的 do_GET / do_POST 就是处理“打开页面”和“提交数据”,逻辑直白。 2. 数据库不用写复杂SQL: sqlite3 的操作只有“建表、存数据、取数据”3步,代码里都封装成了简单函数,不用记SQL语法。 3. 前后端交互简单:靠HTML的 form 表单提交数据,不用写JS的 fetch 或 axios ,新手容易理解“点按钮→数据传给后端→存库→刷新显示”的流程。 Win7下常见问题解决 1. 找不到 templates/index.html :检查文件路径—— server.py 和 templates 必须在同一文件夹, index.html 必须在 templates 里。 2. 启动服务器报错“端口被占用”:打开 server.py ,把 run_server 函数里的 server_addr = ('', 8000) 改成 ('', 8080) (换个端口),再重新运行。 3. 待办间显示乱码:HTML头部已经加了 charset=utf-8 ,Win7下不会乱码,若有问题,重启浏览器即可。 这个项目完全不用Flask,靠Python自带工具就能实现前后端结合,逻辑简单,新手练手刚好~
最新发布
09-09
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值