Mysql 关于关系一对多数据库的快速问题

Mysql 关于关系一对多数据库的快速问题,mysql,database-design,foreign-keys,data-modeling,Mysql,Database Design,Foreign Keys,Data Modeling,我正在做一个场馆/活动数据库,我已经创建了我的表格,如果我做的一切都是正确的,我希望得到某人的确认:) 我有两张桌子: 场地 事件 场馆的主键是场馆ID,设置为自动递增。我在事件中有相同的一栏,它将包含场馆ID的编号。这将连接它们,对吗 另外,表引擎是MyISAM。您的数据库结构是正确的。 您可以使用Innodb添加外键约束。另外,不要忘记在第二个表中添加索引,以便更快地连接两个表 更多关于FK的信息 评论说明: Innodb允许您进行并发选择/(插入/更新),但MyIsam允许您在不从My

我正在做一个场馆/活动数据库,我已经创建了我的表格,如果我做的一切都是正确的,我希望得到某人的确认:)

我有两张桌子:

  • 场地
  • 事件
场馆
的主键是场馆ID,设置为自动递增。我在
事件中有相同的一栏,它将包含场馆ID的编号。这将连接它们,对吗


另外,表引擎是MyISAM。

您的数据库结构是正确的。 您可以使用Innodb添加外键约束。另外,不要忘记在第二个表中添加索引,以便更快地连接两个表

更多关于FK的信息

评论说明:
Innodb允许您进行并发选择/(插入/更新),但MyIsam允许您在不从MyIsam表中删除的情况下执行相同的操作。否则MyIsam将锁定整个表。

您的数据库结构是正确的。 您可以使用Innodb添加外键约束。另外,不要忘记在第二个表中添加索引,以便更快地连接两个表

更多关于FK的信息

评论说明:
Innodb允许您进行并发选择/(插入/更新),但MyIsam允许您在不从MyIsam表中删除的情况下执行相同的操作。否则MyIsam将锁定您的整个桌子。

一般来说,是的。这就是如何指示两个表之间的一对多关系。还可以通过设置外键约束将关系专门编码到数据库中。这将允许添加逻辑,如级联。

一般来说,是的。这就是如何指示两个表之间的一对多关系。还可以通过设置外键约束将关系专门编码到数据库中。这将允许添加逻辑,如级联。

它不会自动将表相互链接,并且引用的列不一定必须具有相同的名称(事实上,在某些情况下,这是不可能的:例如,当一个表有两个列同时引用另一个表中的同一列时)

阅读外键;它们是标准的SQL,完全按照您的要求执行。但是,请注意,MyISAM存储引擎无法强制执行外键约束,因此只要所涉及的任何表使用MyISAM,外键声明就不会增加太多内容(但它会记录关系,至少在SQL脚本中是这样)


我建议您使用InnoDB(或者,如果可行的话,切换到PostgreSQL——它不仅提供外键约束,而且还完全支持事务,这与MySQL不同,MySQL在您执行事务中不支持的操作时会默默地提交挂起的事务,可能会带来毁灭性的结果)。如果您必须/想要使用MySQL,我建议您在任何情况下都使用InnoDB,除非您知道您需要MyISAM提供的额外性能,并且您可以承受这些警告。还要记住,在生产后期将大型表从MyISAM迁移到InnoDB可能会很痛苦,甚至完全不可能。

它不会自动将表相互链接,引用的列也不一定必须具有相同的名称(事实上,在某些情况下这是不可能的:例如,当一个表有两列同时引用另一个表中的同一列时)

请仔细阅读外键;它们是标准SQL,完全可以执行您想要的操作。但是,请注意,MyISAM存储引擎无法强制执行外键约束,因此只要涉及的任何表都使用MyISAM,外键声明就不会增加太多内容(但它会记录关系,至少在SQL脚本中是这样)


我建议您使用InnoDB(或者,如果可行的话,切换到PostgreSQL——它不仅提供外键约束,而且还完全支持事务,不像MySQL,它会在您执行事务中不支持的操作时默默地提交挂起的事务,这可能会带来毁灭性的结果)。如果您必须/想要使用MySQL,我建议您在任何情况下都使用InnoDB,除非您知道您需要MyISAM提供的额外性能,并且您可以承担这些警告。同时请记住,在生产后期将大型表从MyISAM迁移到InnoDB可能会很痛苦,甚至完全不可能。

我考虑过这一点,但是我读到InnoDb最擅长写/更新行,我不会真的去做-只是选择。读到关于myisam/InnoDb的说明我想了想,但后来我读到InnoDb最擅长写/更新行,我不会真的去做-只是选择。读到关于myisam/InnoDb的说明场地可以有多个活动吗?一个活动可以有多个ve吗nue?它会在逻辑上连接它们,但不会在物理上连接。如果您的目标是在删除场地时删除活动,则必须使用InnoDB和外键。@BookOfZeus此模型将在每个场地处理多个活动。一个场地可以有多个活动,而一个活动只能有一个场地。谢谢:)一个场地可以有多个活动吗?一个活动可以有多个地点吗?它会在逻辑上连接它们,但不会在物理上连接它们。如果您的目标是在删除场地时删除活动,则必须使用InnoDB和外键。@BookOfZeus此模型将在每个场地处理多个活动。一个场地可以有多个活动,而一个活动只能有一个场地。谢谢:)我认为这是一个可怕的大会。参考表中的列名应表明列在关系中所起的作用,而不是参考列的名称——对于任何像样的DMB,技术信息已经存在于FK定义中,而功能信息应从列名中显而易见
documents.owner\u id->users.id
documents.user\u id->users.user\u id
更具说服力;事实上,后者甚至具有误导性,因为
user\u id
表明