我几乎总是听到人们说不要在用户会话和任何日志表中使用FKs,因为这些表通常是高写入表,而一旦写入数据,几乎总是永远测试,没有任何更新或删除。
但问题是,我有这样的冒号: User_id (将会话或活动日志链接到用户) activity_id (将日志活动表链接到系统活动查找表) session_id (将用户日志表与父会话链接).还有4-5个colunms。
因此,如果我不使用FKs,那么我将如何“关联”这些冒号?我可以在没有FKs的情况下加入表格并获取用户信息吗?如果没有FKs,我可以写正确的数据吗?有任何表现影响,还是人们只是说,这是一个不,不?
另一个问题是,如果我不使用FKs,我还能用查找表连接我的数据吗?
发布于 2011-01-21 21:01:30
实际上,您可以在mysql中不使用真正的FKs构建整个数据库。如果您使用MyISAM作为存储引擎,那么FKs无论如何都不是真的。不过,只要连接键匹配,就可以完成您喜欢的所有连接。
性能影响取决于您将多少数据填充到引用表中。如果表中有FK并将数据插入其中或更新FK值,则需要额外的时间。插入或修改后,需要在引用表中查找FK,以确保引用的完整性。
对于那些不真正需要引用完整性的高度使用的表,我只使用松散的列而不是FKs。
AFAIK InnoDB是目前唯一一个支持真正外键的(除非MySQL 5.5有新的或更新的存储引擎来支持它们)。像MyISAM这样的存储引擎确实支持语法,但实际上并不验证引用的完整性。
发布于 2011-01-22 14:24:17
在“历史日志”表中,FK可能是有害的。这类表希望保留某一时间点所发生的事情的确切状态。
FK的问题在于,它们不存储值,只是指向值的指针。如果值发生变化,则历史记录将丢失。您不希望将更新级联到历史日志中。有一个可以加入的“假外键”是可以的,但你也想要强烈地去规范相关的领域,以保存历史。
https://stackoverflow.com/questions/4763543
复制相似问题