2011-01-06 57 views
3

對於相冊我看大多數人都使用3個表:相冊表設計

相冊 照片 PhtoAlbums。

但是,如果我看着像Facebook這樣的網站這個模式不會工作(如果我理解正確的),因爲我可以在我的空間相冊和普通相冊中的照片,但我可以給同一畫面不同的描述,不同的標籤,甚至照片ID也不同。所以我的猜測是任何時候用戶創建一張照片的副本,它被視爲一張全新的照片,因此我們只需要兩張表: 相冊和照片(其中有FK到相冊)

其他選項有照片列表只有1列(photo_id),並把所有的照片細節放在PhotoAlbum表中,這樣我就可以爲每個Album賦予每個獨特的屬性。

我在這個設計中有效嗎?

回答

2

Photo < - Photo_Album - >Album。是關係,因此在Photo_Album表(以及照片本身)上放置各種有效載荷(描述,標籤等),因此當照片在數據庫中時,相冊中的照片的每個實例也被標記/描述。

然後,您可以聰明地將這些數據合併/顯示給用戶。

另外,別忘了Facebook不是關係模型。這是一個「NoSQL」風格的數據庫,用於擴展原因,工作方式非常不同。您可以在Google上查找「NOSQL」以瞭解關於該思路的更多信息。

+0

如果照片也在Photo_album表中,那麼爲什麼只有一個照片表。那會是什麼? – Manni 2011-01-06 22:38:53

+0

呃?不,實際的照片不在photo_album表格中,只與專輯有很多關係,加上一些有效載荷來描述這種關係。 – 2011-01-06 22:42:08

1

在關係數據庫中,Photo/Photo_Album/Album是存儲數據的常用方式。原則是您只存儲一次照片(或單個實體),但使用其他機制來提供您需要的最終用戶功能。

實際上,您並不需要在照片的數據庫中創建「複製」以將不同的元數據應用於其中。您可以在包含此元數據的Photo_Album表格中包含元數據(不同標籤,說明等),而不是將其保存在Photo表格中。這樣你就可以爲照片和相冊的每個組合設置不同的元數據。

通過使用相關的辦法這三(以及技術上爲四個)表中可以有元數據約只是一個照片或只是專輯或兩者的組合。

這一切都歸結於您的最終狀態&潛在的未來需求,當然這種設計模式的重點在於將您的數據庫視爲一個單獨的經濟型&優化數據存儲系統。然後使用SQL/TSQL和許多其他「中間」機制爲GUI提供接口。

+0

我認爲這是隻有當原始照片沒有改變?如果我裁剪原始照片或說旋轉180度或做紅眼減少,那麼它是一張帶有新照片ID的新照片? – Manni 2011-01-06 23:06:52

+0

什麼是「第四」表?爲標籤/評論? – Manni 2011-01-06 23:07:26

+1

對不起,我應該更清楚一點。我提到的第四個表格是與Photo_Album表(與一對一關係)相關的表格,用於保存Photo_Album的元數據。您可以將此元數據存儲在Photo_Album表格中,但您需要使用NULLable字段來說明沒有元數據的Photo_Album。將此表分成第四個到一個相關表以消除NULL列被認爲是更好的設計實踐 – 2011-01-07 08:29:13

0

在關係數據庫中,Photo/Photo_Album/Album是存儲數據的常用方式。原則是您只存儲一次照片(或單個實體),但使用其他機制來提供您需要的最終用戶功能。

實際上,您並不需要在照片的數據庫中創建「複製」以將不同的元數據應用於其中。您可以在包含此元數據的Photo_Album表格中包含元數據(不同標籤,說明等),而不是將其保存在Photo表格中。這樣你就可以爲照片和相冊的每個組合設置不同的元數據。

通過使用這三個(技術上很好的四個)表格相關的方法,你可以有關於一張照片的元數據,或者只是一張專輯或兩者的組合。

這一切都歸結到您的最終狀態&未來潛在需求的課程,但這種設計模式的要點是把你的數據庫作爲一個單獨的,經濟的&優化的數據存儲系統。然後,您可以使用SQL/TSQL和其他許多「中間」機制爲您的GUI提供界面。您可以創建最佳相冊設計和製作服務http://www.albumkart.com