订购数据库表的行

时间:2010-02-18 04:44:18

标签: mysql json database-design

我有一个表 feeds ,其中包含一组代码描述行。 e.g。

Key | Value      | Url                    
fb  | facebook   | http://www.facebook.com
tw  | twitter    | http://twitter.com     
ff  | friendfeed | http://friendfeed.com  

REST端点将此表的内容作为JSON数组返回。它显示在网页的下拉框中。

今天老板希望以特定方式对内容进行排序。 我希望你对我的设计发表评论。

设计1

我在名为rank的 feeds 中添加了一个单独的列,以表示该项目的顺序。

Key | Value      | Url                     | Rank
fb  | facebook   | http://www.facebook.com | 3
tw  | twitter    | http://twitter.com      | 1
ff  | friendfeed | http://friendfeed.com   | 2

设计2

我创建了一个单独的表 FeedRank 来存储排名。

Key | Rank
fb  | 3
tw  | 1
ff  | 2

分析

我倾向于设计#1,因为我可以省去JOIN。每种设计的优缺点是什么?你会用哪一个?

3 个答案:

答案 0 :(得分:3)

将排名放在单独的表中的唯一原因是,如果a)代码描述与排名之间的关系不是1:1,或者b)列稀疏地填充(大多数行具有NULL值)

即使在后一种情况下,大多数人都会取消规范化并将排名列放在代码描述表中。

答案 1 :(得分:1)

如果是一对一的关系,没有理由把它放在一个单独的表中。选择#1,imo。

答案 2 :(得分:0)

设计1很好。设计2与设计1基本相同,但具有不必要的复杂性。