回答
1-1的附加限制提供了一个更紧密和更丰富的概念模型,但也可以提供洞察力,可以提供更直观的检索。由于多对一表示父母/收藏关系,因此与检索特定实体的任何给定集合相关的成本不明确。由于1-1提供了一个平面映射,所以还有一个平坦的检索成本。这会导致喜欢在相关时更喜欢提取,因为连接将能够被轻松优化,并且结果数据集将是已知的大小。
谢谢你马特。这非常有帮助。 – eikonomega
Django的外键是多对一的关系。现在,它们之间的区别与“一对一”和“多对一”关系的区别是相同的。例如,如果您有用户和配置文件实体。你想添加一个约束条件,每个用户可以有一个且只有一个配置文件。然后,使用django的一对一字段会在数据库级别创建一个限制,因此您将无法将用户与多个配置文件关联,反之亦然。因为使用外键不会提供这个约束。
他们是不一样的;仔细想想:
如果您在User
和Picture
之间有一对一的关系,那么您说用户只能有一张照片(并且照片只能有一个用户)。如果您的Picture
的外键为User
,则表示图片必须只有一个用户,但用户可能有0,1个或多个图片。
这并没有解释任何关于什么实际上正在进行。 1对1仍然是一个隐藏的权利(只是在一个地方或另一个地方限制更严格)。 –
谢谢@ sampson-chen。我理解1-1关系与普通关键字相反的区别,但我对Django中的结果感兴趣。 – eikonomega
OneToOneField
在'ForeignKey'之后在Django中演变而来。从概念上讲ForeignKey
与unique=True
约束类似于OneToOneField
。
所以,如果你想确保每张图片都有一个用户,反之亦然,请使用OneToOneField
。
如果你想要一个用户有任何数量的图片使用ForeignKey
。
事情的选择方式也不同。在做OneToOneField
的情况下,你可以做user.picture并直接获取图片。在ForeignKey
的情况下,您将执行user.picture_set[0]
以获取第一张图片或访问与该用户关联的所有图片。
MultiTableInheritance在内部隐式使用OneToOneField,您可以看到概念来自哪里。
谢谢Pratik,这非常有帮助。我希望我可以将“正确答案”分给两个人。 – eikonomega
不用担心。也许你可以放弃它,所以当其他人正在寻找相同的答案时,它会显得更高。 –
- 1. 外键的关系一对多
- 2. parse.com上的一对一,一对多和多对多关系之间的区别
- 3. 一对一的关系Visual Studio 2010的关键和非关键
- 4. 多对多关系与一对多关系有什么区别?
- 5. EF4外键与无法识别的唯一键的关系
- 6. JPA:与外键,多个主键和多对一关系问题
- 7. 在MySQL Workbench中创建外键和1对1标识关系的区别
- 8. SQL Server:使用一对一和一对多关系获取所有外键
- 9. @JoinColumn和@JoinTable在一对多关系中有什么区别?
- 10. Laravel:一种是一对多的关系,得到外键值
- 11. 与一对一关系中的共享外键映射表?
- 12. '添加外键属性'为一到零对一的关系
- 13. 处理一对一的外键关系 - LightSwitch
- 14. GreenDao外键概念和一对多关系
- 15. 拥有一对多关系和拥有一对多双向关系(Google App Engine Java Api)之间的区别
- 16. 多对多关系和外键
- 17. 在一对一关系中哪个表具有外键是否有关系?
- 18. 数据库理论:'多对一'和'多到唯一'关系的区别
- 19. 外键约束在一对一关系中不起作用
- 20. 外键关系嵌套一个一对多
- 21. 如何使用外键解决一对一关系问题
- 22. 实体框架4.3一对一外键关系
- 23. 应该有外键存在于一对一或零关系?
- 24. 一对一关系实体框架外键映射
- 25. MySQL的外键与非识别关系
- 26. 非已识别的关系,外键
- 27. 具有一对一关系和双向属性导航的EF6外键
- 28. 与共享主键的双向一对一关系的外键约束违规
- 29. 有关多个一对多关系和外键的数据库设计问题
- 30. Rails:我可以使用外键作为一对一关系中的主键吗?
我不使用Django - 因此我发现这个问题更加令人困惑 - 但它听起来像研究有关“NULL FOREIGN KEYS”(搜索条件)*的争论可能是一个好的起点。 – 2012-10-29 02:37:32
可能的重复[有什么区别django OneToOneField和ForeignKey](http://stackoverflow.com/questions/5870537/whats-the-difference-between-django-onetoonefield-and-foreignkey) – danodonovan