我正在为一个国际网站做一个新项目。任务是提供 16 种语言版本。
在数据库结构上,我想知道这两种方法之间是否有任何性能优势或劣势。什么是首选,为什么?
方法#1
方法#2
正如其他地方所提到的,我对 SQL 和数据库还很陌生。现在弄脏我的手并尝试所有不同的可能性。
我有一台运行 MySQL 的服务器并设置了下表进行测试:
字段类型归类属性 Null 默认额外 id mediumint(8) UNSIGNED 否 无 AUTO_INCREMENT 域 varchar(255) utf8_unicode_ci 否 无 status enum('...') utf8_unicode_ci 否 无 Replaced_by mediumint(8) UNSIGNED 是 NULL
这个想法是有一个对电子邮件有效的域列表,例如“gmail.com”和“hotmail.com”。现在,如果某个域被识别为与另一个域重复(例如“googlemail.com”到“gmail.com”),则状态列会指示这一点,而“replaced_by”列则为要使用的主域提供 ID。
此外,如果域被识别为无效(例如“gymail.com”而不是“gmail.com”),则数据库可以存储此信息,并且通过 status 和 replace_by 脚本可以建议正确的域。
虽然 ID 是该表的主键,但我想使用 ON DELETE RESTRICT 和 ON UPDATE CASCASE 测试replaced_by 列上的外键。以便replaced_by 列与主ID 保持同步。
但不知何故,当我尝试更新数据时,出现以下错误。为什么?
#1451 - Cannot delete or update a parent row: a foreign key constraint fails (`test`.`domains`, CONSTRAINT `domains_ibfk_1` FOREIGN KEY (`replaced_by`) REFERENCES `domains` (`id`) ON UPDATE CASCADE)
Run Code Online (Sandbox Code Playgroud)
编辑 - …
我在这篇博文中看到了以下句子:
了解您的数据 - 这有助于您在数据类型/可空性方面做出正确的决定,流失有助于实现长期维护目标(和初始维护计划)
我无法弄清楚“流失”是什么意思。这是什么?我只发现很多文章都在谈论“流失”而没有说明它是什么。
很直接的问题:
假设我有一个我知道经常使用的特定查询,我可以告诉 MySQL 始终“自动”缓存它吗……即,一旦缓存的查询结果被刷新,mysqld
立即再次运行该查询,以便为缓存数据做好准备下一个用户?
或者反过来:我可以告诉 MySQL 不缓存特定查询吗?其他缓存选项呢,不一定与查询相关?
我在网上搜索了这个,但找不到任何相关的东西。