回答
由于您使用的是Doctrine,请尽量不要在RDBMS级别上考虑太多(至少在大多数情况下)。
如果您有两个具有ManyToMany关系的实体,则应该忘记代理键。事实上,你几乎应该忽略关系表存在的事实。你只需要有两个相关的实体类型。
现在,如果您需要存储有关关系本身的元数据(例如徽章颁发给用户的日期),那么您将超越一个简单的ManyToMany,并且您需要自己为该关系建模 - 通过创建一种新的实体(例如UserBadge)。那个实体当然会有一个id。
您正在使用ORM,请考虑实体,而不是关于表(大部分时间)!
我更喜欢在每个表上使用单列自动更新密钥。它使删除和更新更简单。
大部分时间在这样的一个joinn表中,只是将它们设置为一个组合PK就没有问题。
您不需要添加代理键。我不会。
您严格不需要需要它,但它在SQL控制台上播放时可能非常方便,特别是如果两个标识符都很长并且很难打字。
另一方面,它打破3NF。如果您不小心,最终可能会得到两个包含不同代理键和(book_id, author_id)
值的记录。您将有两个索引来确保两个唯一性约束;这会减慢插入和更新。
另外你可能想避免额外的列来提高效率。如果你的表有很多记录,有一个额外的列会使它在内存中的缓存效率降低,并且使用它的连接会更频繁地被磁盘I/O放慢。
这里有两个问题。
您需要对书籍/列组合进行唯一约束以避免重复。即使您使用auto-inc代理键,也必须这样做。第二,现在很多框架不知道如何处理除整数键之外的任何东西,所以你可能还想把它放在整数列上。但在这种情况下,你会需要两者。
你从来没有需要一个代理键,因为你总是可以原则上总是使用一些其他的键代替。
在你的问题中,我不认为你的意思是“关系表”,更不用说“关系”。我认为你的意思是“一张带有多个外键的桌子”。具有多个外键的表与其他表并不不同,并且它们的设计原则也不需要不同。选择与其他表格相同的密钥。
- 1. 我是否需要为has_many:through关联创建一个关联表?
- 2. 我是否需要在一对多关系中使用代理键?
- 3. 我是否需要为get/post ActionResult创建相同的列表?
- 4. 我是否需要手动为HABTM连接表创建迁移?
- 5. 我是否需要ARC关键字来处理我没有合成的属性?
- 6. WCF代理:我是否需要为每个绑定创建一个新的和不同的代理?
- 7. 为什么我们需要SvcUtil.exe来创建/生成代理类
- 8. 我是否需要使用关键字关闭SQL Server连接?
- 9. 是否总是需要创建Dim表?
- 10. 我是否需要将nginx设置为我的MongoDB实例的反向代理?
- 11. 我是否需要为UITextField创建一个控制器?
- 12. 我们是否需要为gcnew创建指针验证
- 13. 我是否需要为MySQL创建索引?
- 14. 我是否需要为WinRT应用程序创建缩略图
- 15. 我是否需要创建2个表单来集成付款处理API?
- 16. 我是否需要一个完整的内容管理系统?
- 17. 我是否需要关闭()FileReader和BufferedReader?
- 18. 如果它是从ObjectContext创建的,我是否需要处理一个DbContext?
- 19. 使用我(VB.NET)关键字是否需要?
- 20. 需要高级帮助来验证我对关系数据库设计中关于代理键的理解
- 21. CakePHP/SQL动态表创建和关系,我需要一个更好的方法
- 22. 我的数据库表中是否需要外键?
- 23. 我是否需要观察每个创建的NSManagedObjectContext的NSManagedObjectContextDidSaveNotification?
- 24. 我需要创建一个SQLite表
- 25. 我是否需要为Loopback中的两个模型声明关系类型?
- 26. 我是否需要Ubuntu上的Virtual Box来创建docker机器?
- 27. 我是否需要在ER图中明确建模依赖关系?
- 28. 我是否需要处理/关闭XDocument.Load(字符串)?
- 29. 我需要什么样的关系
- 30. Facebook代理邮件未到达 - 我是否需要权限?
是吗?如果你想删除或更新记录,说明作者A写了书B,代理人将如何提供帮助?如果没有首先使用author_id和book_id选择代理,您甚至会知道代理的价值是什么? – 2011-04-27 11:42:32
而不是从表中删除where column1 ='abc'AND column2 ='xyz'你从表中删除id = 123. – 2011-04-27 14:03:59
是的,我知道。我的问题是,你怎么知道你想要删除的ID是123,而不是通过你知道的东西 - 作者和书籍来查找该行? – 2011-04-27 14:06:58