首页 新闻 会员 周边

数据库设计问题请教!

0
悬赏园豆:20 [待解决问题]

前几天遇到一个项目,大概情况是这样的,有一个用户在网站上开启课程,但是该课程对应的实际是一本书籍,该书籍有章节目录,但是在节目录下面又有一些东西比如该小节下的上课学生关联,还有该章节下的其他东西关联暂且不说。

经过分析以后我个人的建议是一张表解决问题,采用id  parent—id 树形结构设计关系来关联,书,章,节三个关系,但是设计者设计方式是按照基本三大范式来设计的,三个关系既然是一对多对多,那么他就设计了三个表,结果每次做复杂查询的时候要5.6个表连接,我认为效率很低

 

我想问的是到底如何设计才是合理,同时扩展性和容灾性,外键如何保证?我想需要一个经验多的大牛指导一下,不过我确实想请教的意思,这个是个典型设计案例。

奇民的主页 奇民 | 初学一级 | 园豆:147
提问于:2016-02-06 23:40
< >
分享
所有回答(3)
0

我有几个问题:

  1. 目录应该是分好几级吧?
  2. 小结本身应该不分级了,且只存在于最低级目录下吗? 
  3. 和上课学生关联的是只有小结吗,还是和目录、书籍都有关联?

你能告诉我吗,我也试试想想看

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

我觉得最好遵循范式,虽然查询麻烦,但是容易看明白,易维护和扩展,用一个大表的话如果新手接手会看不懂的。当然模型的创建也依赖于具体的需求,如果你能说的更详细一些,我也设计一些模型,咱们再讨论,谢谢。(我不是高手,呵呵)

会长 | 园豆:12401 (专家六级) | 2016-02-16 11:35
0

单表和多表

要看书、章、节的相似程度,如果相似度很高,可以用一张表;所以应该先把几个主体的特点描述出来,区分共性和特性,看看要多大的相似度。

关于表级联

即使是一张表,也要涉及到自表级联。效率的优化要考虑索引的建立、sql查询的优化(比如先筛选,再级联、嵌套子查询)。

一尾金鱼 | 园豆:200 (初学一级) | 2016-02-24 16:33
0

遵循范式,采用多表。原因是扩展性高,维护性高。至于效率问题,因为多表数据每张表的数据更单纯,所以应该是效率更高(更容易建索引,或者优化)。而多表连接的问题,可以采用视图的方式解决。就是在你的课程模块中,单独写一个视图来查询课程关系。

希望对您有帮助。

横槊 | 园豆:12 (初学一级) | 2016-02-26 09:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册