2014-06-05 80 views
3

我是一名初學者開發人員,我想問一些建議。PHP&MySQL標記系統邏輯

我目前正在構建一個平臺,允許人們上傳圖片並對其進行標記。

我是通過結構如下的一些文章閱讀存儲標籤

存儲邏輯1

| photo_id |  name  |   tags   | 
|  1 | some photo | flower, sun. island, beach | 
|  2 | some photo2 | hawaii, travle. surf  | 

羅得說,這不是一個好主意

所以我邏輯。

我在讀周圍約多到許多關係,我想出了這個邏輯

標籤表

| tag_id | name | 
----------------------- 
|  1 | flower | 
|  2 | hawaii | 
|  3 | surfing | 
|  4 | island | 
|  5 | travel | 

照片表

| photo_id |  name  | 
--------------------------- 
|  1 | some photo | 
|  2 | some photo2 | 

關係表

| tag_id | photo_id | 
--------------------------- 
|  1 |  1  | 
|  2 |  1  | 
|  3 |  1  | 
|  4 |  2  | 
|  5 |  2  | 

我選擇使用Laravel framework使開發更容易

但我的問題是邏輯2和我所害怕的是它會產生一個巨大的加載時間。

因爲沒有默認的基於用戶的標籤,我想到了以下邏輯。

用戶上傳與標籤的圖像,保存圖像之前,請檢查是否實際標籤exsit如果不救它,以後返回tags_id,並將其保存到關係表photo_id

所以我有2個問題

  • 哪種邏輯更好,爲什麼?

  • 如果邏輯2,我認爲它的方式好嗎?並且我應該擔心將來有很多標籤會在那裏加載時間?

謝謝

+2

你不應該擔心加載時間,因爲你會希望知道所有關於數據庫索引,以及他們如何幫助防止時間上升... :-) – vogomatix

+0

它不會是一個問題,例如當人們搜索一個實際的標籤? – Levi

+1

您也可以爲標籤名稱編制索引...添加速度較慢,因此搜索速度更快。 – vogomatix

回答

1

在你的第二個例子,你relation table應該有索引,所以,當你尋找基於特定photo_id的所有標籤,答案將迅速返回。

Foreign Keys

看到你relation表,tag_id是一個外鍵到您的變量表和photo_id是一個外鍵照片表。標籤可能與超過1張照片有關係,並且照片可能與多個標籤有關係。

類似地,您的標籤(和照片)的名稱也應該被索引以進行快速搜索。

+0

謝謝你的建議先生 – Levi

2

我會去第二個。我不擔心加載時間。你可以很容易地獲得連接類別。

但是,您應該在關係表上添加一個id列,以便多個圖像可以共享一個類別。

+0

我會用Laravel,那已經做那個工作:),但是謝謝你的建議 – Levi