首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL日志数据库设计

SQL日志数据库设计
EN

Stack Overflow用户
提问于 2015-03-13 16:09:26
回答 1查看 149关注 0票数 0

我需要一个数据库来记录不同的事件。

我有一张主桌

代码语言:javascript
复制
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`)
)

因此,我选择并制作了一个侧表,以包含主日志的任何值。该值可以是动态的。

代码语言:javascript
复制
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表中的所有数据?

EN

回答 1

Stack Overflow用户

发布于 2015-03-13 19:59:47

您缺少一个较长的日志消息文本列;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’=离开用户名varchar(40),主键(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) )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29027486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档