我正在做一个场地/事件数据库,我已经创建了我的桌子,如果我做的一切正确,我希望得到某人的确认:)
我有两张桌子:
Venues
的主键是VENUE_ID,设置为auto_increment。我在Events
中有相同的列,其中包含场地ID的编号。这应该连接它们,对吗?
此外,表引擎是MyISAM。
答案 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)
一般来说,是的。这是您指示两个表之间的一对多关系的方式。您还可以通过设置外键约束来专门将关系编码到数据库中。这将允许添加逻辑,例如级联。