我创建了一些将用于路由器活动报告的表。
每个表都是路由器api命令的一对一副本。 我的问题是,从设计和会议的角度来看,这些表有什么不好之处?关于它应该改变什么以及我做错了什么? 我知道它是扁平的,没有标准化,但除此之外。
以下是创建语句:
CREATE TABLE `Hotspot_UserActivity` (
`Id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`HotspotNameId` varchar(100) DEFAULT NULL,
`Server` varchar(100) DEFAULT NULL,
`User` varchar(50) DEFAULT NULL,
`Address` varchar(20) DEFAULT NULL,
`MacAddress` int(50) DEFAULT NULL,
`Uptime` varchar(100) DEFAULT NULL,
`SessionTimeLeft` varchar(20) DEFAULT NULL,
`IdleTime` varchar(20) DEFAULT NULL,
`ByteIn` int(50) DEFAULT NULL,
`ByteOut` int(50) DEFAULT NULL,
`PacketIn` int(20) DEFAULT NULL,
`PacketOut` int(20) DEFAULT NULL,
`TimeCreated` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# Dump of table interface
# ------------------------------------------------------------
CREATE TABLE `interface` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`type` varchar(20) DEFAULT NULL,
`mtu` int(32) DEFAULT NULL,
`l2mtu` int(32) DEFAULT NULL,
`max_l2mtu` int(32) DEFAULT NULL,
`mac_address` varchar(32) DEFAULT NULL,
`tx_byte` int(24) DEFAULT NULL,
`rx_byte` int(24) DEFAULT NULL,
`tx_packet` int(16) DEFAULT NULL,
`rx_packet` int(16) DEFAULT NULL,
`rx_drop` int(16) DEFAULT NULL,
`tx_drop` int(16) DEFAULT NULL,
`rx_error` int(16) DEFAULT NULL,
`tx_error` int(16) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# Dump of table host_activity
# ------------------------------------------------------------
CREATE TABLE `host_activity` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`mac_address` varchar(20) DEFAULT NULL,
`address` varchar(20) DEFAULT NULL,
`server` varchar(20) DEFAULT NULL,
`uptime` varchar(20) DEFAULT NULL,
`idle_time` varchar(20) DEFAULT NULL,
`bytes_in` int(20) DEFAULT NULL,
`bytes_out` int(20) DEFAULT NULL,
`packets_in` int(20) DEFAULT NULL,
`packets_out` int(20) DEFAULT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# Dump of table Hotspot
# ------------------------------------------------------------
CREATE TABLE `Hotspot` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`HotspotName` varchar(11) DEFAULT NULL,
`Interface` varchar(11) DEFAULT NULL,
`Profile` varchar(11) DEFAULT NULL,
`IdleTimeOut` varchar(11) DEFAULT NULL,
`KeepAliveTimeOut` varchar(11) DEFAULT NULL,
`ProxyStatus` varchar(11) DEFAULT NULL,
`Invalid` varchar(11) DEFAULT NULL,
`Https` varchar(11) DEFAULT NULL,
`Disabled` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# Dump of table system_health
# ------------------------------------------------------------
CREATE TABLE `system_health` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`temperature` int(11) DEFAULT NULL,
`cpuTemperature` int(11) DEFAULT NULL,
`powerConsumption` int(11) DEFAULT NULL,
`voltage` int(11) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# Dump of table system_resource
# ------------------------------------------------------------
CREATE TABLE `system_resource` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`uptime` varchar(50) DEFAULT NULL,
`free_memory` int(50) DEFAULT NULL,
`total_memory` int(50) DEFAULT NULL,
`cpu_count` int(50) DEFAULT NULL,
`cpu_frequency` int(50) DEFAULT NULL,
`cpu_load` int(50) DEFAULT NULL,
`free_hdd_space` int(50) DEFAULT NULL,
`total_hdd_space` int(50) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
# Dump of table user_activity
# ------------------------------------------------------------
CREATE TABLE `user_activity` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`uptime` int(11) DEFAULT NULL,
`bytes_in` int(11) DEFAULT NULL,
`bytes_out` int(11) DEFAULT NULL,
`packets_in` int(11) DEFAULT NULL,
`packets_out` int(11) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
答案 0 :(得分:0)
坏事:
StudlyCase
和snake_case
混合在字段名称Hotspot_UserActivity
包含用户名,而不是他的ID)latin1
字符集,它将使所有unicode消失system_health
表选择一个好的主键吗?可能你可以用某种方式编码一段时间或使用(HotspotNameId
,{ {1}},user_id
/ TimeCreated
)作为PeriodId
Hotspot_UserActivity
足以表示int
。为什么VARCHAR在那里?Uptime
字段包含TimeCreated
子句。那个怎么样?这是ON UPDATE CURRENT_TIMESTAMP
字段,而不是created_at
。