我和我的同事正在開發一個與Stackoverflow類似的網站,但是用於提交任務(以及用於內部使用)。今天早上我們談論了標記任務,並且不能真正確定哪個選項是最快的選項,或者如果我們不缺少某些東西。如何表示DB中兩個項目之間的關係?
讓我們來想象帶有標籤的表格,這些標籤會根據用戶動態更新。用戶可以創建任何標籤並將其添加到此表中。情況如下:
- ID
- 名
- 數
我會得到點實際的吧。例如,如果您點擊標籤「PHP」,它會向您顯示另一頁,其中包含所有標記爲「PHP」的任務。類似於this page。重要的是這相關標籤列表。如何在數據庫中表示它?
有兩種選擇出現在我們的腦海中,但我不認爲它們中的任何一個都是最有效的。
使用「PHP」標記選擇所有任務並檢查它們包含的其他標記。幾年之後,我們可能會從服務器獲得答案。
請與COLS表標籤,相關標籤,計數其中將所有可能的標記關係。只有我們看到的問題是雙重性。我們可以標記PHP和相關標記DB2,但我們也可以使用相關標記PHP來標記DB2,這當然是非常相同的關係,並且具有相同的計數。
我其實很喜歡選項#2,但沒有重複性。也許選擇標籤之間沒有如此密切關係的地方(就好像沒有任何「主要」和「次要」標籤)可以最好地工作。在這一點上,我並不十分確定,我不想塑造一些在未來無法工作的東西,或者如果有一百萬個標籤會太慢。
我們將使用PHP和mySQL或DB2,但我想這並不重要。
所以,實際的問題是:有沒有其他的,可能更好的選擇?如有任何問題,請問我。
在此先感謝。
嗯,我會選擇2,並擁抱可能性的重複性,因爲這可以讓你有單向標籤,從而你總是搜索相關標籤基於最左邊的列 即你總是搜索標籤= [無論]你只是消費RelatedTag。如果你看到我的意思,那麼你可以將「PHP」標記爲「DB2」,而不必將「DB2」與「PHP」聯繫起來,因爲我傾向於認爲DB2-> PHP不一定與PHP-> DB2 ....然後再次有可能我瘋了大聲笑。 而且我不會擔心即使是1M標籤。索引/磁盤空間將照顧你:) – 2013-01-18 19:07:52