Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库设计:what';识别外键的目的是什么?_Mysql_Database_Database Design - Fatal编程技术网

Mysql 数据库设计:what';识别外键的目的是什么?

Mysql 数据库设计:what';识别外键的目的是什么?,mysql,database,database-design,Mysql,Database,Database Design,我正在使用MySQL Workbench对我的数据库进行建模。在它中,我可以选择通过识别外键等来创建关系。这有什么意义?没有这些关系,我可以很好地运行查询 我的表确实有一个实际的外键列,我只是没有在MySQL工作台中定义它们。也就是说,我没有那些连接表的行。外键对于确保数据完整性很有用。如果您定义了它们,数据库本身将确保不允许将无效的外键值插入表中。您可以在没有外键的情况下对数据库进行建模。。但是,始终建议使用外键来保持数据一致性。。如果在数据库中没有使用外键,则必须手动更改查询并跟踪外键id。

我正在使用MySQL Workbench对我的数据库进行建模。在它中,我可以选择通过识别外键等来创建关系。这有什么意义?没有这些关系,我可以很好地运行查询


我的表确实有一个实际的外键列,我只是没有在MySQL工作台中定义它们。也就是说,我没有那些连接表的行。

外键对于确保数据完整性很有用。如果您定义了它们,数据库本身将确保不允许将无效的外键值插入表中。

您可以在没有外键的情况下对数据库进行建模。。但是,始终建议使用外键来保持数据一致性。。如果在数据库中没有使用外键,则必须手动更改查询并跟踪外键id。但是,如果确实指定了外键,那么不仅对您来说,而且对sql来说,映射数据也会变得更容易。

外键可以做一些事情。最明显的是,正如梅西·艾比(Macy Abbey)所提到的,它们为您提供了内置的数据完整性


有趣的是,您最喜欢的RDBMS的查询优化器也可以使用外键等约束进行额外的优化。基本上,数据库可以确定它在编写查询方面是否比您做得更好。外键的存在使数据库可以做出这些假设。你可以在网站上找到一个很好的例子。虽然该链接是特定于SQL Server的,但无论数据库引擎如何,其原理都是相同的。

如果您不了解数据完整性约束及其在数据库设计中所起的重要作用,那么我建议您在开始设计数据库之前先学习一些课程或书籍。聘请一些专业人士来帮助您完成当前项目可能是一个好主意。

如果您没有外键,您就没有关系。因此,您没有关系数据库;它是一桶鱼,没有完整性,您将没有关系数据库的能力(Jeremiah的答案只是众多答案中的一项)。

使用外键关系可以获得以下好处:

  • 引用完整性(当然)
  • 在某些情况下,优化器可以生成更好的执行计划
  • 工具支持(元数据、迁移、分析等)
  • 首先,我使用所有可用的约束类型。
    然后,如果它被证明会影响性能,我就开始删除它。这是一个很好的策略,可以让你晚上睡个好觉。

    另外,请注意使用外键确实会带来一些开销(降低操作速度)。有趣的Jeremiah,根据我上面的帖子,我认为外键只会降低性能。谢谢+1在插入和更新数据时,外键约束将导致一些较小的开销。有一些特殊情况下,你想抛弃FK,但在大多数情况下,他们是你的朋友。(高写低读日志表是不需要FKs的一个示例。)