是否有任何指导方针或经验法则来确定何时存储聚合值以及何时动态计算它们?
例如,假设我有用户可以评分的小部件(请参阅下面的架构)。每次我显示一个小部件时,我都可以从Ratings表格中计算出平均用户评分。或者,我可以将平均评分存储在Widget表格中。这将使我不必在每次显示小部件时计算评分,但是每次用户对小部件进行评分时我都必须重新计算平均评分。
Ratings Widgets
--------- -------
widget_id widget_id
user_id name
rating avg_rating <--- The column in question
Run Code Online (Sandbox Code Playgroud) 在 MySQL 中 varchar 大小之间是否存在性能差异?例如,varchar(25)和varchar(64000)。如果没有,是否有理由不声明所有具有最大大小的 varchars 以确保您不会用完空间?
在 MySQL 中,最好总是允许空值,除非你知道一个字段是必需的,还是总是使用Not Null除非你知道一个字段将包含空值?还是没关系?
我知道在某些 DBMS 中,他们说要Not Null尽可能多地使用,因为允许空值需要每条记录额外的位(或字节?)来存储空状态。
我正在设计一个具有多个查找表的数据库,其中包含主要实体的可能属性。我正在考虑使用 4 或 5 个字符的键来标识这些查找值,而不是自动递增的整数,这样当我将这些属性 ID 存储在主表上时,我将看到有意义的值而不仅仅是随机数。
使用字符字段作为主键而不是整数对性能有什么影响?
如果这很重要,我正在使用 MySQL。
[编辑]
这些查找表很少添加新记录。它们是手动维护的,基于字符的密钥也是手动创建的。下面是一个例子:
CUISINES
ID Description
----- --------------
CHNSE Chinese
ITALN Italian
MXICN Mexican
Run Code Online (Sandbox Code Playgroud) 在 MySQL 表定义中,INT(5)和之间有区别SMALLINT(5)吗?或者它们都代表相同的大小?
很多时候,当试图提出一个高效的数据库设计时,最好的做法是建立两个示例数据库,用数据填充它们,然后对它们运行一些查询,看看哪个性能更好。
是否有一种工具可以相对快速地生成(最好直接进入数据库)大型(约 10,000 条记录)测试数据集?我正在寻找至少适用于 MySQL 的东西。
我最近听说聚集索引中的数据页不是连续存储的。这是真的?
也许数据页通常是连续存储的,但规则有一些例外?或者我听错了,数据页总是连续存储的。
非常感谢。
我正在尝试将模式更改从 MySQL Workbench 同步到我的数据库。尝试创建外键时出现以下错误:
Executing SQL script in server
ERROR: Error 1005: Can't create table 'tomato.#sql-2730_1b8' (errno: 121)
Run Code Online (Sandbox Code Playgroud)
这是它试图执行的语句:
ALTER TABLE `tomato`.`ing_allergy_ingredient`
ADD CONSTRAINT `fk_ai_allergy`
FOREIGN KEY (`allergy_id` )
REFERENCES `tomato`.`ing_allergy` (`allergy_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
Run Code Online (Sandbox Code Playgroud)
任何想法这个错误意味着什么?
我支持非营利组织的 Access 数据库。我们有一些关于数据神秘变化的问题,并且有一些,嗯,友好的辩论,关于这是否是由不是最懂计算机的用户引起的,还是由我的一些后台处理引起的。
我已经在 UI 级别为这些条件添加了一些检查,但我想在数据库表级别进行一些检查,以便在某些字段更改时进行记录。通过这种方式,我将了解更改是由用户发起还是仅来自在后台运行的更新查询。通常我会使用on update触发器,但据我所知 Access 不支持触发器。Access 中是否还有其他日志记录或类似触发器的功能?
我有以下两个带有外键的表status_id:
mysql> describe usr_cookbook;
+-----------+-----------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------+------+-----+-------------------+-------+
| user_id | int(11) | NO | PRI | NULL | |
| recipe_id | int(11) | NO | PRI | NULL | |
| status_id | int(11) | NO | MUL | NULL | |
| added_ts | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+-----------+------+-----+-------------------+-------+
mysql> describe usr_cookbook_status;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | …Run Code Online (Sandbox Code Playgroud) mysql ×8
datatypes ×2
performance ×2
aggregate ×1
data-pages ×1
foreign-key ×1
ms-access ×1
null ×1
primary-key ×1
sql-server ×1
tools ×1
trigger ×1
varchar ×1