2012-12-03 69 views
0

假設我有一系列在數據庫中編碼的文章,這些文章顯示在網站的前端。用戶定義的排序 - 額外的列或表?

如果添加了對自定義排序的支持,那麼應該如何/應該在數據庫中表示?

P.S:可能存在文章顯示在多個列表中的情況。

+1

排序選項應基於您的表的結構,並且可能只會添加混亂作爲元數據,除非您預見它經常更改。我個人會保留僅在應用程序中定義的訂單的定義。 –

+0

「我個人會保留僅在應用程序中定義的訂單的定義。」例如在一個XML文件中? –

回答

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選項

不同的數據類型給你插入和改變的順序不同的選項。最常用的是無間隙

  • 整數(插入需要重寫一堆行)
  • 整數與間隙(插入的間隙,重寫一串行當的間隙閉合)
  • 浮子(插入到現有花車之間的中途,重寫時分裂失敗)
2

如果我理解正確,那麼每個用戶都可以按不同的順序顯示訂單。假設每個用戶都有一個ID,那麼您需要一個由三個字段組成的表,用戶ID /文章ID /顯示順序,其中用戶ID和文章ID爲表提供複合主鍵。