gpt4 book ai didi

mysql - 这个模式有什么不好的地方?

转载 作者:行者123 更新时间:2023-11-29 22:48:59 25 4
gpt4 key购买 nike

我创建了一些将用于路由器事件报告的表。

每个表都是 routers api 命令的一对一副本。我的问题是,从设计和惯例的角度来看,这些 table 有什么不好的地方?应该改变什么以及我做错了什么?我知道它是平坦的并且没有标准化,但除此之外。

以下是创建语句:

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;

最佳答案

坏事:

  • 您在字段名称中混合了 StudlyCasesnake_case
  • 您不使用主键链接表(例如,Hotspot_UserActivity 包含用户名,而不是他的 ID)
  • 表上没有索引
  • 您正在使用 latin1 字符集,它会清除所有 unicode
  • 您的表可能有过多的代理主键(您确定无法为 system_health 表选择一个好的主键吗?也许您可以以某种方式对一段时间进行编码或使用 (HotspotNameId user_idTimeCreated/PeriodId)作为 Hotspot_UserActivity 中的主键
  • 您允许太多字段为空。这真的有必要吗?你们的 table 那么稀疏吗?
  • 您可能为某些数据库字段选择了错误的类型。例如,我非常确定 4 个字节 int 足以表示 Uptime。为什么是 VARCHAR?
  • 您违反了自己的命名约定。例如,您的 TimeCreated 字段具有 ON UPDATE CURRENT_TIMESTAMP 子句。那个怎么样?这是 created_at 字段,而不是 updated_at

关于mysql - 这个模式有什么不好的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28970085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com