日期:2014-05-17  浏览次数:20865 次

项目的表设计,请有设计经验的进来谈谈,感激各位了
现在项目的逻辑是这样的:有2个频道(以后可能更多),频道下有学习模块(8个),每个模块都有8个栏目(学习模块的栏目都一样的)   
所以我现在设计了一个频道表,用来表示频道的id,和频道名称。然后设计一个学习模块表,有一个字段是对应频道id的。8个栏目我建了8个表,因为栏目里面的内容都不同的数据结构。所以我建了8个表,同时8个栏目表里面都有对应频道id和对应的学习模块id。。。问题就在这里了,我需要建一个中间表用来连接学习模块和栏目之间的关系吗?我现在如果要查所有内容信息是需要查询8个表呢。。。我知道这样设计不是太好,但怎么设计比较好呢,各位大神帮忙提提建议
------最佳解决方案--------------------

这些都是基础。
学习表中有一个外键lid,引用的是模块表的id,标记这条学习模块属于哪个频道。
栏目表中有一个外键xid,引用的是学习表的id ,标记这条栏目模块属于哪个学习模块。


-------------------
不需要用什么中间表。
总共就3张表。频道表,学习表(lid外键),栏目表(xid外键)。
如果用SQL查询的时候要用到多表查询。这个很简单。SQL语句网上能够找到。
如果用关联映射,查询就简单了。全都是操作对象。


------其他解决方案--------------------
没人知道,自己顶
------其他解决方案--------------------
你将频道,模块和栏目的字段都发上来吧,这样更好解决问题
------其他解决方案--------------------
栏目没有表去说明,我是做了8个内容信息表,然后一个频道表,一个模块表

这是其中一个内容信息表,其他内容表都差不多


频道表

模块表
------其他解决方案--------------------
先把他们之间的关系想清楚。在写。上级对下级,都是一对多。
------其他解决方案--------------------
楼上好强。。。
------其他解决方案--------------------
频道表:
pindao:
id  频道表的id
xuexi:
id  学习表的id
pid 外键,引用频道表的id,维护频道表和学习表的关系
lanmu:
id   栏目表的id
xid  外键,引用学习表的id,维护学习表和栏目表的关系  
------其他解决方案--------------------
引用:
频道表:
pindao:
id  频道表的id
xuexi:
id  学习表的id
pid 外键,引用频道表的id,维护频道表和学习表的关系
lanmu:
id   栏目表的id
xid  外键,引用学习表的id,维护学习表和栏目表的关系


------其他解决方案--------------------
新手就容易这样,万物皆表,把一根直线就可以解决的,也搞成用若干线圈环环相扣起来.若是珍珠项链,还可以臭美,若是佛珠手链,也可以养性,但这种线圈,让人觉得作用实在只能是浪费.

现在不就是三个实体对象吗? 频道,模块,栏目.
栏目的内容结构互不相同,所以单独建表是应该的.
但频道和模块呢?本质其实是一个东西,只不过它们的上级父对象不同而已.
对频道来说,它们的父对象就是网站根目录.
对模块来说,它们的父对象是各自所属的频道.
所以用一个表就可以了:
ID 英文名称 中文名称 父ID
0  root  根目录
1  theforever1 频道1 0
2  sections1 栏目1 1
3  sections2 栏目2 1
4  theforever2 频道2 0
5  theforever3 频道3 0
6  sections3 栏目3 2
7  sections4 栏目4 3
其中0只是考虑结构完整,在读取频道和栏目时,只需要读取id>0的,把它排除即可.但记录的父ID为0的,你知道它是根目录下的子对象就行了.

这样一来,关系较密切而且本质相同的两个实体用一个表就可以表示和存储,在读取生成结构和维护结构目录(比如增删栏目,及增删频道导致的数据联动更新)时,效率比双表联查要好.

------其他解决方案--------------------
栏目这样的表, 数据量应该不大。 如果结构差异花不算太大。  设计成一个表, 就算有几个冗余字段应该也没问题吧。
------其他解决方案--------------------
赞同楼上的。  数据少的表  冗余字段  也没什么问题。反而可以提高查询效率