用户定义的排序 - 额外的列或表?

时间:2012-12-03 04:08:28

标签: mysql database-design

假设我在数据库中编码了一系列文章,这些文章显示在网站的前端。

如果添加了对自定义排序的支持,那么在数据库中如何/应该如何表示?

P.S:可能存在一个文章显示在多个列表中的情况。

2 个答案:

答案 0 :(得分:3)

在数据库中存储用户定义的排序的唯一方法是作为表中的数据行。为此,您需要

  • 识别用户,
  • 识别文章,
  • 识别订单。

前两个很容易。存储订单有几种不同的方法。设计目标通常是减少重写订单的需要。

create table user_defined_order (
  user_id integer not null references users (user_id),
  article_id integer not null references articles (article_id),
  sort_order <sort_data_type> not null,
  primary key (user_id, article_id),
  unique (user_id, sort_order)
);

最后一个约束unique (user_id, sort_order)与应用程序有关。

sort_data_type选项

不同的数据类型为您提供了插入和更改订单的不同选项。最常用的是

  • 没有间隙的整数(插入需要重写一堆行)
  • 带间隙的整数(插入间隙,当间隙关闭时重写一堆行)
  • float(在现有浮点数之间插入,在拆分失败时重写)

答案 1 :(得分:2)

如果我理解正确,那么每个用户都可以按不同的顺序显示订单。假设每个用户都有一个id,那么你需要一个由三个字段组成的表,即用户id / article id / display order,其中user id和article id为表提供了一个复合主键。