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

时间:2011-08-28 15:49:05

标签: mysql database-design foreign-keys data-modeling

我正在做一个场地/事件数据库,我已经创建了我的桌子,如果我做的一切正确,我希望得到某人的确认:)

我有两张桌子:

  • 场地
  • 活动

Venues的主键是VENUE_ID,设置为auto_increment。我在Events中有相同的列,其中包含场地ID的编号。这应该连接它们,对吗?

此外,表引擎是MyISAM。

3 个答案:

答案 0 :(得分:2)

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

有关FK http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

的更多信息

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

答案 1 :(得分:2)

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

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

我建议您使用InnoDB(或者,如果可行,切换到PostgreSQL - 它不仅提供外键约束,它还完全支持事务,与MySQL不同,MySQL会在您执行某些操作时静默提交待处理事务在交易中不支持,具有潜在破坏性的结果)。如果您必须/想要使用MySQL,我建议您使用InnoDB来处理所有事情,除非您知道您需要从MyISAM中获得的额外性能您可以负担得起警告。还要记住,稍后在生产中将大型表从MyISAM迁移到InnoDB可能会很痛苦,甚至完全不可能。

答案 2 :(得分:0)

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