Mysql 我应该为这3个连接的表使用外键吗?

Mysql 我应该为这3个连接的表使用外键吗?,mysql,sql,Mysql,Sql,所以我有3张桌子: Table: Albums Columns: Id, Name, Description, Author, Folderpath, Thumbnail, Upvotes, Downvotes Table: AlbumsConnection Columns: Id, AlbumId, AlbumImagesId Table: AlbumImages Columns: Id, InAlbum, Imagepath 到目前为止,我一直在使用这些表,但实际上没有使用外键。我应该

所以我有3张桌子:

Table: Albums
Columns: Id, Name, Description, Author, Folderpath, Thumbnail, Upvotes, Downvotes

Table: AlbumsConnection
Columns: Id, AlbumId, AlbumImagesId

Table: AlbumImages
Columns: Id, InAlbum, Imagepath

到目前为止,我一直在使用这些表,但实际上没有使用外键。我应该用外键吗?我知道我必须向AlbumsConnection添加2个外键,每个表1个外键,每个外键将引用其他2个表的主键(即ID)。正确吗?

外键有助于确保数据库的关系完整性。没有明确声明它们的要求,但这是一个好主意,特别是如果您正在学习使用数据库

外键让数据库知道一个表中的列与另一个表中的列相关。我不认为MySQL的优化器会显式地使用这些信息,尽管它会在外键列上创建索引(与大多数其他数据库不同)


此外,声明的外键关系可以帮助您处理对数据库的更改。它将防止将无效相册插入连接表。如果删除相册,则可以控制删除和更新的处理方式(通过
级联
约束)。

外键有助于确保数据库的关系完整性。没有明确声明它们的要求,但这是一个好主意,特别是如果您正在学习使用数据库

外键让数据库知道一个表中的列与另一个表中的列相关。我不认为MySQL的优化器会显式地使用这些信息,尽管它会在外键列上创建索引(与大多数其他数据库不同)


此外,声明的外键关系可以帮助您处理对数据库的更改。它将防止将无效相册插入连接表。如果您删除相册,它会让您控制删除和更新的处理方式(通过
级联
约束)。

“我应该在这里使用外键吗?”是外键强制执行数据完整性。。。“我知道我必须向AlbumsConnection添加2个外键,每个表1个外键,每个外键将引用其他2个表的主键(即ID)。这正确吗?”是的,听起来非常正确。。。并确保表是使用InnoDB引擎创建的。。。。。但问题主要是基于观点的,您所说的“并确保使用InnoDB引擎创建表”是什么意思?我正在使用phpMyAdmin创建数据库和表。它使用那个引擎吗?只有innoDB引擎支持外键。“它使用那个引擎吗?”我不知道这个定义是在MySQL服务器中设置的,但我确信你可以在创建表时选择Innodb引擎作为选项。啊,是的,它使用Innodb。参见Gordon Linoff的anwser,它解释了很多。“我应该在这里使用外键吗?”是的,外键强制数据完整性。。。“我知道我必须向AlbumsConnection添加2个外键,每个表1个外键,每个外键将引用其他2个表的主键(即ID)。这正确吗?”是的,听起来非常正确。。。并确保表是使用InnoDB引擎创建的。。。。。但问题主要是基于观点的,您所说的“并确保使用InnoDB引擎创建表”是什么意思?我正在使用phpMyAdmin创建数据库和表。它使用那个引擎吗?只有innoDB引擎支持外键。“它使用那个引擎吗?”我不知道这个定义是在MySQL服务器中设置的,但我相信你可以在创建表时选择Innodb引擎作为选项。啊,是的,它使用Innodb。参见Gordon Linoff的anwser,它解释了很多。