我想用php和mysql創建一個簡單的標籤系統,這樣用戶可以通過表單添加一些標籤。我的問題是,我應該將標籤保存爲單個數據庫列中的數組嗎?例如。 「tag1,tag2,tag3」..或者我應該在數據庫表中有單獨的列,我應該在每列中保存每個標籤。 我希望我的問題很清楚。 謝謝。如何在數據庫中保存標籤(關鍵字)?
9
A
回答
20
我可能不會說。在標籤和被標籤對象之間使用多對多的關係。舉例來說,如果被標記的東西是一個問題,表看起來是這樣的:
Question:
QuestionId
Title
Body
Tag:
TagId
Name
QuestionTags:
QuestionId
TagId
0
你可以使用序列化並unserialise的關鍵字存儲在一個領域。這裏更多的信息 http://php.net/manual/en/function.serialize.php
事情是這樣的......
$keywords = array('apple', 'pear', 'banana', 'peach');
$keywords_serialized = serialize($keywords);
$sql = INSERT INTO dbtable (keywords) VALUES ($keywords_serialized);
8
今天跨越這個問題來了,以及與聚集在這裏的一些想法,雖然問題不是很新的,我會離開我解決方案以及:
我認爲答案克勞斯Byskov霍夫曼給了不錯,但我會添加,並將標記列表存儲爲像他說的多對多表,但也作爲序列化的字符串以某種形式(通過像user466764說的序列化,或者像你自己說的逗號分開的事情,這可以與我一起處理mplode/explode)在主表中。
是啊,我知道:存儲相同的數據兩次不能很好地與許多數據庫的完美主義者接受,因爲它擔負着越來越不一致的危險,但我會爲性能和簡單做到這樣:
多對多表(標籤表)僅用於搜索。爲了提高搜索性能,我只限於訪問該表以進行搜索(當然,我們需要在編輯標籤時對其進行更新),但從不查詢它僅用於在某處查看/列出標籤。並且序列化標籤列表適用於查看相關文章或項目的每個地方 - 當顯示該項目時,表格已經存在,每當您想要顯示該頁面時再對標籤表格進行查詢在主表中已經有了列表時,這是不必要的。確保在更新標籤時要小心,以便始終在兩個地方更新它們,最好通過一個既執行兩者的setter函數,也不應存在不一致的問題。
相關問題
- 1. 如何使用PHP將標籤/關鍵字從數組保存到數據庫?
- 2. 在數據庫中保存標籤
- 3. 如何存儲關鍵字/標籤
- 4. 如何在數據庫中存儲帖子的關鍵字
- 5. 從表單保存數據庫中的數據。關鍵錯誤
- 6. IOS保存標籤數據
- 7. 如何確保組合鍵在數據庫中不存在?
- 8. Firebase保存對象作爲數據庫的關鍵字
- 9. 在圖數據庫中存儲標籤
- 10. 在數據庫中存儲JSP標籤
- 11. 將會話保存到標籤,然後保存回數據庫
- 12. 如何允許在sql數據庫中保存重複鍵
- 13. 如何在數據庫中保存'contenteditable'
- 14. 如何在數據庫中保存
- 15. 如何在數據庫中保存XamDiagram?
- 16. 如何在Android中保存數據庫?
- 17. 如何在數據庫中保存HTML
- 18. Twitter4j:在標籤中搜索關鍵字
- 19. 保存數據庫標準
- 20. DotNetNuke頁面關鍵字存儲在數據庫中的位置?
- 21. 爲什麼輸入關鍵字不存儲在數據庫中?
- 22. 在數據庫或derrive中存儲URL關鍵字
- 23. 如何在數據庫中存儲無限標籤?
- 24. 如何在數據庫中存儲域名標籤?
- 25. 如何保存數據庫
- 26. 如何在oracle數據庫中創建唯一的關鍵字?
- 27. 如何按關鍵字/標籤對git存儲庫進行分組
- 28. 關鍵字標籤結構
- 29. 元標籤關鍵字
- 30. 策略保存表單數據(在標籤/瀏覽器關閉)
這種方式提供可擴展性並允許使用索引進行數據庫優化。好答案。 – 2010-12-21 14:14:24
我登陸此頁面搜索關於在此類方案中更新標籤列表的建議。你會怎麼做? DELETE FROM QuestionTags WHERE QuestionId = 123然後INSERT INTO QuestionTags所有剩下的和新的標籤?這對開發者來說似乎是最簡單的,但對性能來說可能不是最好的... – Henno 2012-07-04 18:05:58
@Henno我不知道我明白你的意思。你可以問一個單獨的問題嗎? – 2012-07-05 08:05:36