我正在创建一个MySQL数据库,我不确定如何创建关系表以获得最佳性能。
我有船和汽车桌。每辆车或每艘船都会有几张照片。我想我有两个选择。
1-)我将创建一个上传表 - > id,parent_table,parent_id ......
2-)我将创建两个表,如upload_ship和upload_car - > id,parent_id
哪一个更适合表现? 通常,关系表必须分开或组合吗?
答案 0 :(得分:3)
逻辑上,它们是单独的表,因为约束(在这种情况下是外键)是不同的。稍后您可以在单个VIEW中将它们组合在一起。
在物理上,默认情况下性能差异不大,但如果您的访问模式可以从中受益,则使用单独的表可以灵活地将它们放在不同的磁盘上。
id,parent_table,parent_id
从不这样做。
您实质上是在阻止DBMS为您强制实施参照完整性。尝试从触发器或应用程序代码强制执行它在并发环境中实际上并不容易,并且生成的代码可能具有微妙的竞争条件和/或执行不如“本机”FOREIGN KEY。 / p>
通常,关系表必须分开或组合吗?
这是一个很大的话题。我建议阅读有关数据库建模和规范化的内容。您可能会发现ERwin Methods Guide有趣的是它 - 它是关于特定产品(一种名为ERwin的建模工具),但它解释的概念是通用的。