我需要一個表來記錄用戶在WordPress中執行的某些操作。用於在WordPress中記錄用戶操作的數據庫設計
截至目前,這是數據庫模式我有陣營了:
id bigint(20) NOT NULL AUTO_INCREMENT,
uid bigint(20) NOT NULL,
type VARCHAR(256) NOT NULL,
data1 TEXT NOT NULL,
data2 TEXT NOT NULL,
data3 TEXT NOT NULL,
timestamp bigint(20) NOT NULL,
UNIQUE KEY id (id)
讓我澄清一下:
uid: User ID of the wordpress user
type: Type of action the user made (can be 'comment', 'new_post', 'login', etc)
data1/2/3: additional data (for example, ID of comment or post made)
要顯示的日誌,我就查詢數據庫,並貫穿一個特定的過濾器來獲取文本顯示爲特定的日誌。所以它的工作原理是這樣的:
if($type == 'comment') {
$comment = get_comment($data1);
$user = get_user($uid);
echo "User {$user->name} has made a <a href='{$comment->permalink}'>comment</a>";
}
這是最有效的做事方式嗎?對我來說這似乎相當不錯,因爲我不想將HTML存儲在日誌表中以便輸出。
但是,問題出現在我想要在特定條件滿足時隱藏特定日誌條目的地方。例如,如果評論不再存在,我想隱藏該條目。這會導致分頁問題。關於如何克服這一點的任何建議?
謝謝!
編輯:
myplugin_transactions
id bigint(20) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
type VARCHAR(256) NOT NULL,
timestamp bigint(20) NOT NULL,
UNIQUE KEY id (id)
myplugin_meta
id bigint(20) NOT NULL AUTO_INCREMENT,
txn_id bigint(20) NOT NULL,
key VARCHAR(256) NOT NULL,
data TEXT NOT NULL,
UNIQUE KEY id (id)
可以說,我想從那裏myplugin_transactions DATA1通常會不得不被 'x' 和數據2被 'Y' 選擇*。在這種情況下我應該怎麼做?
SELECT * FROM myplugin_transactions LEFT JOIN myplugin_meta ON myplugin_transactions.id = myplugin_meta.txn_id WHERE (... ?)
您的數據類型可能會更好。你真的需要'BIGINT'作爲'user_id'嗎?你預計有超過40億用戶嗎? 'timestamp'列應該是'TIMESTAMP'類型。儘量避免使用'TEXT'類型;它會強制任何分類在磁盤上完成。除非你真的需要超過255個字符,否則使用'VARCHAR(255)'。主表上的'type'列應該是'VARCHAR(255)',因爲它使256增加了一個額外的字節。這些更改可以顯着減少數據和索引的大小。 –
@ G-Nugget感謝您對VARCHAR(255)與VARCHAR(256)之間的性能差異的意見。如果我使用TIMESTAMP類型,是否會有性能改進?我還選擇了BIGINT而不是INT,因爲它符合WordPress數據庫模式(http://codex.wordpress.org/Database_Description/3.3#Table:_wp_users)。他們可能使用BIGINT來實現可伸縮性。我是一名插件開發人員,這是爲公衆考慮編寫的。我應該使用INT還是堅持BIGINT? – mushroom
如果你一致,我想可以使用'BIGINT'。時間戳值實際上會是什麼?它會是一個unix時間戳或格式化的日期?此外,它將始終是行插入到表中還是其他時間?你也應該讓你'INT'類型字段'UNSIGNED';使用'BIGINT',你可能不會注意到任何區別,但這是正確的。 –