我需要一个数据库来记录不同的事件。
我有一个主表
CREATE TABLE IF NOT EXISTS `log` (
`log_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`log_label` varchar(255) NOT NULL,
`log_level` int(1) NOT NULL DEFAULT '0',
`log_type` varchar(255) NOT NULL,
`log_time` datetime NOT NULL,
PRIMARY KEY (`log_id`)
)
所以我选择并制作了一个边表来包含主日志的任何值。该值可以是动态的。
CREATE TABLE IF NOT EXISTS `log_data` (
`log_data_id` int(11) NOT NULL AUTO_INCREMENT,
`log_id` int(11) NOT NULL,
`log_data_key` varchar(255) NOT NULL,
`log_data_value` varchar(255) NOT NULL,
PRIMARY KEY (`log_data_id`)
)
当我需要通过 php 和 mysql 接收数据时,我会遇到一些问题/限制吗?
一个示例是使用“log_type = error”获取所有日志 我应该如何连接 log_data 表中的所有数据?
最佳答案
您缺少较长的日志消息文本列; varchar(255)
很小。
这个设计是一个奇怪的混合体:
- 如果您想要“通用”设计,
log
的大部分字段应降级为log_data
。 如果您想记录根本不同类型的事件,则应该为每种类型使用专门且独立的表格,而不要使用笨重的“边表”:
CREATE TABLE IF NOT EXISTS `chat_membership_log` ( log_id int(11) NOT NULL AUTO_INCREMENT, log_time datetime NOT NULL, event_type char(1),--'J'=join, 'L'=leave username varchar(40), PRIMARY KEY (`log_id`) ) CREATE TABLE IF NOT EXISTS `application_crash_log` ( log_id int(11) NOT NULL AUTO_INCREMENT, log_time datetime NOT NULL, PID varchar(20), command_line varchar(2000), PRIMARY KEY (`log_id`) )
关于mysql - SQL日志数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29027486/