我爲我的CMS添加了一個新功能到我的用戶模塊,並且我碰到了一個障礙......或者我猜想,這是一條叉路,我希望在我承諾之前從stackoverflow得到一些意見任何東西。
基本上我想允許管理員添加新的'額外'用戶字段,用戶可以在註冊時填寫,編輯他們的配置文件,和/或由其他模塊控制。一個例子就是生日字段,對自己的長篇描述,或者用戶在網站上獲得的積分。不用說,存儲的數據將會變化,並且可以從大量文本到小整數值。更糟糕的是 - 我希望可以選擇搜索這些數據。在MySQL中存儲「額外」用戶數據的最佳方法?
這樣就行了 - 最好的辦法是什麼?現在我傾向於擁有一張帶有以下列的表格。
userid, refFieldID, varchar, tinyint, smallint, int, text, date, datetime, etc.
我寧願這個,因爲它會使顯著搜索速度更快,並參考表(它包含所有字段的數據,如字段名的,不管是搜索還是沒有等)在存儲該字段的數據時應參考使用哪一列。
另一個想法,這是我建議和我見過的其他解決方案中使用(vBulletin是一個,雖然我看到別人的名字逃脫我在這一刻),你剛纔有用戶名,參考ID ,和medtext字段。我對MySQL的確切知之甚少,但這種方法似乎會讓搜索速度變慢,並且可能會有更大的開銷。
那麼哪種方法是'最好的'?我還有其他方法嗎?無論我最終使用哪種方法,它都需要快速搜索,而不是大規模(只需少量開銷即可),並且最好允許針對數據使用複雜的查詢。
哇謝謝,我實際上會回覆第一個同意#1的人,哪個列可以選擇 - 但我想我不必再去了:)。關於你的帖子 - 你的意思是文字和blob,int和bigint?或者一個或另一個?另外,如何添加'bool'(tinyint(1))列?我可以看到它非常有用,並且可能用得很多 - 在你看來,值得保存3個字節嗎? 另外,列數是否會增加磁盤上某一行的大小?當然空列。我不懷疑你的(驚人的)桌面佈局,只是好奇而已。 – Jon 2011-02-07 04:05:44