This topic created in 5398 days ago, the information mentioned may be changed or developed.
场景是这样的:
为了简单的起见,这里认为是一个新闻系统,我需要有新闻的分类,然后新闻会选择属于那个分类
如果这条新闻只输入那天记录,一般是在这个新闻表加个 分类 字段,直接用,如果我的一天新闻属于多个分类,而且,分别查看每个分类的时候,都会显示出来这个新闻
那么除了我把分类表和新闻的id做个第三张对照表,还有更好的方法吗?
如果做了第三张对照表的话,如何设计这个表更好?
7 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
iwinux Aug 4, 2011
假如只用两张表的话,一个比较山寨的方法是以字符串的方式存储多个 category id,然后自己负责解析……
三张表就简单了,是 Has And Belongs To Many,或者叫 Many To Many 关系
第三张表有两个字段就可以了:category_id 和 article_id
|
 |
|
2
Insomnia Aug 4, 2011
只存一张表的话,用字符串村了,那单独查看这个分类的新闻时,如何解析呢?
三张表的话,那就先根据分类id,从第三张关系表中查出来对应的新闻id,再根据新闻id去新闻表查出来,但是如何新闻表中出来的时候,还要根据某个时候显示的字段来判断是否显示的话,那么这样分页的时候不好控制吧?难道在第三表冗余下,把这个新闻的是否显示等属性冗余过来下?
|
 |
|
3
manhere Aug 4, 2011
article表:article_id article_content ... cata表:cata_id cata_name ... relation表: cata_id article_id ...
一直这样用,感觉很灵活
|
 |
|
4
sun019 Aug 5, 2011
一个新闻只属于一个分类的话就是一对多,用两个表就可以了吧
|
 |
|
6
napoleonu Aug 5, 2011
如果用Join的话,你在2楼的问题都不是问题,Join的过程就是按照一定的规则把多张表合并成一张表,既然成了一张表你要按照什么排序筛选都没问题。数据量大的时候Join也很难受。
我再说两个我想到的,可用不可用自己判断哈
1.你可以评估或这限定一下比如一个新闻同时最多只能属于4个分类,那就加四列分类信息字段。但是如果根据分类查新闻的时候可能索引的利用效率不是很好 cat1=1 or cat2=1 or cat3=1 or cat4=1 这样。
2.如果一篇文章属于多个分类的情况不多可以选择对一篇文章的内容插入多行数据,除了分类信息不一样。这样根据分类查询文章就很简单了,但是如果要对文章进行更新可能就多消耗点资源了,空间也有所浪费。
虽然上面两个方法有违一般的设计思想,但是根据场景的不同也不是绝对不可用,我觉得 :)
|