惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
腾讯CDC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
F
Full Disclosure
博客园 - 【当耐特】
C
CERT Recently Published Vulnerability Notes
Engineering at Meta
Engineering at Meta
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threatpost
I
Intezer
V2EX - 技术
V2EX - 技术
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Hacker News
The Hacker News
小众软件
小众软件
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
N
News | PayPal Newsroom
MyScale Blog
MyScale Blog
AI
AI
Vercel News
Vercel News
Spread Privacy
Spread Privacy
美团技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
V
Vulnerabilities – Threatpost
Schneier on Security
Schneier on Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
Help Net Security
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 热门话题
U
Unit 42
L
LangChain Blog
Recent Announcements
Recent Announcements

博客园 - snryang

网站发布小工具,--让发布变简单一点 - snryang - 博客园 鼠标右键发布文件到远程服务器 关于跑步耳机的一些思考 对棋牌游戏平台的一些思考 复杂业务简单化的一个小技巧 老婆和老媽同時掉在了水裡终于有答案了 重发我的 HTML单据输入控件 js对象序列化为json字符串 CSS的一个小技巧 - snryang - 博客园 基于jQuery的单据输入 基于jQuery的表单验证 - snryang - 博客园 基于JQuery的拖拉效果, cms系统也不复杂 IList对象排序方法 基于jqury的自动完成 让你的博客园变灰 弹出遮罩层示例. Jquery学习 用反射来解决字段多带来的烦恼
数据库结构中的"树"
snryang · 2008-03-18 · via 博客园 - snryang

数据库结构中的"树"

2008-03-18 21:04  snryang  阅读(500)  评论()    收藏  举报

    最近接触了一个项目,是一个题库管理系统.其中有这样一部分需求
一、学校基础信息管理
二、部门基础信息管理
三、班级信息管理
四、对于试题的搜索有如下分类
1、按章节分

语文→第一章   →第一节→知识点
数学→第一单元→第一节→知识点
政治→第一课   →第一节→知识点

2、按版块分
科目→版块1→知识点
科目→版块2→知识点
科目→版块2→知识点
科目→版块3→知识点

(其它省略)

按一般的思路,我想有人会这样建表

对于试题的分类可能方法就多了,
刚学不久的可以会"在题目表里面,建立N个字段,这题是属于那个'科目',那个'版块'...."
聪明一些的可以会"把类型提出来,放在其它表里面,但是加几个表呢?"

其实上面的需求还隐藏着一些东西,
一、系统以后面对的可能不是一个学校,而是一个地区了几个学校,学校是属于那个区?那个省?
      那么我们需要增加表嘛?(没事,到时候加二个表,改一改代码就行了,反正用不了多少时间。)
二、题目的分类,各个学校分类都一样嘛?(我们是权威机构,要求他们必需按我们的要求分类,这公司太强了。)
      “第一节”下面也许会出现“第一小节”,“版块”下面又要分个“XX版块”。加字段还是加表?
(呵呵!经历过)

试试下面的方法建表。

认真一点分析,我们会发现,其实这些东西都是一级一级的,都互相有联系,与“树”很像。
而且用树来存储这些数据,还非常容易扩展,无论你在学校上面再怎么划分,在科目下面再怎么分“小节”都很容易办到,而且不用改数据库。程序写的好,程序也不用改。

当然上面的树可以根据实际项目需要,增加或删除一些字段。

我想对于有经验的程序员应该是很熟悉“树”在项目中的应用,大型的系统肯定少不了这种结构。