如果我在同一张表的同一列中有同一行,我每天写入 4 个字节(整数)100,000 次,那会磨损 SSD 吗?对于 SSD 来说,每天 400 kb 不算什么,但将它写入同一个存储单元就会弹出它。
- Postgres 数据库管理系统是否以某种方式在后台处理这些单元?
- 还是现代 SSD 芯片在硬件中做到这一点?
- 还是它们都被写入同一个存储单元,我们只是随着时间的推移交换死掉的 SSD?
如果我在同一张表的同一列中有同一行,我每天写入 4 个字节(整数)100,000 次,那会磨损 SSD 吗?对于 SSD 来说,每天 400 kb 不算什么,但将它写入同一个存储单元就会弹出它。
比如说,一个表与表、和car
具有一对一的关系。如果 a是,它就不能再出现在or a等中。electric_car
gas_car
hybrid_car
car
electric_car
gas_car
hybrid_car
这样的设计有什么问题吗?未来可能会出现的一些问题?
例如,有三个表:players
、dungeons
和instances
。
一个player
有很多dungeons
,一个dungeon
有很多instances
,就像一个著名的魔兽世界游戏。每个player
都有一个dungeon_id
作为外键,每个dungeon
都有一个instance_id
作为外键。那将是一种足够的极简主义方法。player
每一个都instance
可以通过dungeon
表访问。这将减少 1 列,但查询时间更长。
另一种方法是作为外键添加player_id
到表中。instances
现在玩家可以直接从instances
表中查询。更短的查询,但外键多一列。
从长远来看,哪种方法更好?在实践中,似乎在逻辑上可能的任何地方都添加外键会更容易。但是这不会导致更紧密的耦合并使代码更难重构吗?
我的 MySQL 数据库表中有一堆列将布尔值(0 或 1)存储为 tinyint。它们默认为 0,并不意味着为空。我正在考虑将列属性设置为 NOT NULL,以便进行另一次验证检查以防万一。我想知道这是否会以增加桌子尺寸为代价。我担心的是,也许 NOT NULL 属性会为每个数据条目添加另一位?
我的数据库是新的,几乎是空的,所以当我尝试检查表的大小时,它总是给我 16kb。
我在 MySQL Workbench 中创建列,它经常在数据类型后的括号中放置不同的数字,例如我输入:
Column Name Datatype:
id INT
account_parameters INT
accounts TINYINT
account_properties TINYINT
执行查询后我得到
Column Name Datatype:
id INT(10)
account_parameters INT(11)
accounts TINYINT(1)
account_properties TINYINT(2)
它为什么这样做?为什么一个应该是 INT(11),而其他是 INT(10)?