This topic created in 3303 days ago, the information mentioned may be changed or developed.
最近遇到一个很纠结的业务模型:
要给一个教师培训机构设计题库,题库里每道题都隶属某个分支,关键奇葩就是在这个分支的定义上,这个分支在业务上是如下定义的:
首先,分学段:幼儿,小学,初中,高中
学段下面,是一级学科,
幼儿:综合素质,保教技能
小学:综合素质,教育能力,专业技术能力
初中:综合素质,教学能力,专业技术能力
高中:综合素质,教学能力,专业技术能力
然后,在“专业技术能力”下,还分语文,数学,英语。。。。等等第二级学科,且,小学,初中,高中拥有的下级学科还不一样。但是综合素质,教育能力这些又没有第二级学科。
于是这种分级不平衡现象导致这个题库里的题目出现一个很尴尬的现象
有的题目,属于一级学科,而有的题目,则属于二级学科
当然我是可以把题库表建成这样
题目 id 题目名称 所属 1 级学科 所属 2 级学科
但是我总觉这似乎哪里不对劲,但是又说不出到底哪不对头。
请各位指点
16 replies • 2017-05-10 13:37:11 +08:00
 |
|
1
Muninn May 10, 2017
专业技术能力下边如果没有直接的题,那么可以只对应末级节点啊。
学科在程序里做成一棵树就行了。参考无限扩展的机构设计。
|
 |
|
3
ivvei May 10, 2017
没看出这个模型有什么问题啊…… 就直接按照你描述的建好啦,比如
题目 ID, 题目, 学段,一级学科,二级学科
没有二级学科的,可以视为二级学科为“没有”。
单纯存储这样的结构毫无问题。具体的还得看你是怎么使用这些数据,用起来是不是方便。
|
 |
|
4
abcbuzhiming May 10, 2017
@ jianzhiyao020 @ ivvei 其实你们两个的想法我都考虑过,一个就是树,一个不是树,有限级别,我现在就是在权衡我这个“分级”到底改起来到底麻烦不麻烦。比如说如果万一标准变了,某个学科不存在了,对应的题目要转移到新学科去,变动是否很大
|
 |
|
5
gamexg May 10, 2017
学科表 id 名称 上级学科
题目表 id 题目名称 题目所属学科
现在是 2 级学科可以用“所属 1 级学科 所属 2 级学科 ”,但是下次如果再增加个三级学科,难道要修改表结构?
|
 |
|
6
tabris17 May 10, 2017
简单的树状结构,有什么问题?
如果要能按照节点查找所有字节点,可以使用左右值结构
|
 |
|
7
reus May 10, 2017
学科合并成一级不就行了。 综合素质,教育能力,语文,数学,英语…… 业务模型又不用对应到数据库模型。数据库里就一级学科,业务里需要区分出一级二级时再另外处理下。
|
 |
|
9
reus May 10, 2017
树不用存到数据库里,直接在代码里写,也不会经常改动的。需要用到树时,从数据库读出来再生成。 用关系数据库存树,各种方式都有优缺点,麻烦得很。你这种父子关系不经常变动的,写在代码里,要改时才改代码就行。
|
 |
|
11
ivvei May 10, 2017
@ abcbuzhiming 标签就是 tag 那种。适合有多种分类方式并且级别不明显的,不适合你这种分类方式唯一确定且级别层次明显的。
|
 |
|
12
jianzhiyao020 May 10, 2017
@ abcbuzhiming其实还好啦, 用户对读是敏感的, 但是写是可以异步的, 可以走个异步队列去修改相关的题目或者分类, 修改步骤很简单, 但是索引的重建在数据量大的情况下需要考虑, 我们现在场景数据是千亿级别的, 都是用 linux 目录形式做索引, 索引应该问题不是很大。
|
 |
|
15
CYKun May 10, 2017 via Android
同意 7 楼的想法,具体来说就是:
学科表: id 学科名称 父学科 id
题目表: id 题目名称 学科 id
|
 |
|
16
ideascf May 10, 2017
学科表 id 名称 上级学科
题目表 id 题目名称
学科题目关系表 id 题目 id 学科 id
这样有几个好处: 1. 一个题目可以关联多个学科 2. 学科 删除或修改 不影响题目表 坏处: 表多一些,查询的时候需要做 join
|