2009-08-25 56 views
0

我在寫一個顯示帖子的應用程序,很像一個簡單的論壇系統。 用戶在提交帖子時可以將帖子標記爲緊急,但版主必須批准「緊急」狀態。即使該職位沒有被批准爲緊急職位,仍然會顯示職位,但在主持人批准緊急職位之前,該職位似乎是正常職位,此時該職位將得到特殊待遇。最好的mysql方法?

我已經考慮了這兩種方法:

1)必須在職位表中兩個標誌。一個表示用戶請求緊急狀態,另一個表示管理員是否已批准緊急狀態。只有在均爲的情況下,該帖子纔會顯示爲緊急。

2)有兩個表。請求待定表,其中包含所有未決的緊急批准。一旦管理員批准緊急狀態,我將從掛起的表中刪除請求並更新posts表,以便緊急字段對於該帖子成爲true。

我不確定這兩種方法是否比其他方法更好。

第一個解決方案意味着我只有一張桌子需要擔心,但最終會出現更多字段。不知道這是否實際上查詢任何較慢,考慮到posts表將是應用程序中查詢最多的表。

第二個解決方案保持張貼表精簡,但廣告另一個表處理(不是這很難)。

我傾向於第二種解決方案,但是不知道我是不是過度分析並使我的生活比需要更復雜。建議嗎?

回答

1

當然是1)。額外的桌子只是弄亂了事情。一個額外的狀態字段就足夠了,值爲:0 =正常,1 =緊急請求,2 =緊急批准。

對於需要批准的查詢,您可以使用status = 1進行查詢,如果您按狀態desc進行排序,則自然會提前收到緊急消息。

+0

真是個好主意。 posts表已經存儲了「urgent」標誌,但是這樣我就可以將掛起的請求放到同一個字段中。謝謝。 – nedlud 2009-08-25 07:00:17

+0

嗯,這正是我所建議的:D看起來像我有點missunderstood .. 在我的解決方案中,第二張表包含他所看重的意思 - 這就是你用0 = normla等寫的東西。 – 2009-08-25 07:17:05

+0

off:What a精神分裂症的尼克是一個IT相關網站上的NedLud! =) – Zed 2009-08-25 07:20:16

1

有自帶一點:)另一種解決方案

你可以有交的狀態,並在你的帖子表,你將有一個columnt它引用一個狀態表..

這apporach有幾個優點 - 就像您可以在將來無縫添加更多狀態一樣。或者您甚至可以擁有另一張表,其中包含狀態可以更改(工作流程)的規則。

+0

我喜歡這個想法,但現在我會選擇1),它似乎是目前爲止最受歡迎的答案。 – nedlud 2009-08-25 07:01:26

1

第二種方法在設計方面是最乾淨的,它可能最終會佔用更少的磁盤空間。第一種方法不太「純」,但從維護和編碼的角度來看,它更簡單;因此我會採用這種方法。

此外,很高興看到有人在設計之前就想到設計並編寫大量代碼。 :)不能告訴你有多少搞砸的項目,我看過,其中一小時的思考設計會節省所有涉及的許多小時的努力...

1

我認爲選項1是最好的。你需要做的唯一的事情就是創建一個帶有兩個字段的索引。 選項2添加太多複雜度

我有一個mysql查詢只是爲了這樣的事情。我會盡快記住/發現正確的語法

+0

這是。這將使所有標誌= 1的行首先,然後一切將按「日期時間」或任何字段排序 ORDER BY CASE WHEN flag = 0 THEN 0 ELSE 1 END,datetime – 2009-08-25 06:59:40

+0

err,typo :用1代替0,反之亦然 – 2009-08-25 07:00:55

+0

哦,很好。謝謝:) – nedlud 2009-08-25 07:02:20