小编Joe*_*ner的帖子

对于外键设计,增加 id 与全文键的权衡是什么?

在许多关系数据库设计中,有些字段会在其他表中引用。

例如,考虑具有唯一用户名的用户表和存储地址数据的第二个表。

一种可能的布局,我会说是常见的方法,因为我在大多数软件中观察到,是使用这样的自动增量 id:

Table users
===========
userId int primary auto_increment
userName varchar unique

Table adressdata
==========
userId int references users.userId
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key on (userId,adress_type))
Run Code Online (Sandbox Code Playgroud)

这就是我过去常常这样做的方式,也是我在大多数情况下看到的方式。

另一种方法是:

Table users
===========
userName varchar primary

Table adressdata
==========
userName varchar references users.userName
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key …
Run Code Online (Sandbox Code Playgroud)

mysql

8
推荐指数
1
解决办法
186
查看次数

为什么 MySQL 在使用 FROM_UNIXTIME 时计算出错误的时间戳

我已经调试了很多,最后设法在 mysql shell 中重现它。

我将时间戳存储在字段类型为 的 mysql 数据库中timestamp。我用来FROM_UNIXTIME()从我的脚本中更新它们,并UNIX_TIMESTAMP()在选择它们时使用。

当我没有在使用SET time_zone =它的连接中设置时区时,它工作正常。但是当我设置时区时,会发生以下情况:

  1. UNIX_TIMESTAMP() 仍然给出正确的结果。
  2. UPDATE table SET field = FROM_UNIXTIME(..) 在数据库中设置错误的值。
  3. 设置的错误值,与服务器时区和连接时区之间的偏移量不对应。服务器时区为亚洲/曼谷 (UTC + 7),连接时区为欧洲/柏林 (UTC + 1)。但是,该值以 1 小时的差异存储,而不是 6 小时。
  4. 再次读取该值时,我得到了错误的值。

我知道是 FROM_UNIXTIME() 不起作用,因为当我打开另一个没有连接特定时区的连接时,我看到错误的值,直到我再次更新它。

它是 1 小时的差异这一事实让我认为这可能是夏令时问题。因为柏林有夏令时而曼谷没有(据我所知)。

这是 mysql shell 的未修改日志,我在其中重现了此行为。

服务器时区是亚洲/曼谷(CIT)

$ mysql -uroot -p timezonetest
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with …
Run Code Online (Sandbox Code Playgroud)

mysql timestamp timezone

6
推荐指数
1
解决办法
1万
查看次数

哪个数据库系统可以让我解脱?

我目前正在运行一个 MySQL 数据库来记录和分析这些日志。

我当前的表架构如下所示:

CREATE TABLE `mylogs` (
`transfer_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`client_id` INT UNSIGNED NOT NULL ,
`client_ip` INT UNSIGNED NOT NULL ,
`server_1_ip` INT UNSIGNED NOT NULL ,
`server_2_ip` INT UNSIGNED NOT NULL ,
`service` ENUM(  'service1',  'service2',  'service3',  '...',  'service500' ) NOT NULL ,
`mb_transferred` FLOAT UNSIGNED NOT NULL ,
`time` TIMESTAMP NOT NULL
) ENGINE = MYISAM ;
Run Code Online (Sandbox Code Playgroud)

我运行了一项服务,在那里我提供了大量下载,这些下载在目标和源主机之间通过 1 个额外的主机。它们由 32 位 IP 地址的整数解释表示。

我的系统目前在高峰时段处理大约 500 次插入/秒。我运行的是主从系统。主服务器有一个带有 PHP 文件的 apache …

mysql nosql replication cassandra

4
推荐指数
1
解决办法
325
查看次数

标签 统计

mysql ×3

cassandra ×1

nosql ×1

replication ×1

timestamp ×1

timezone ×1