For example, if you were building a database of “places”, you would
build pretty standard stuff such as address, phone number, etc. in the
database. Then, if you wanted to build a database of restaurants on
top of the places, instead of repeating yourself and replicating those
fields in the Restaurant model, you could make Restaurant have a
OneToOneField to Place (because a restaurant “is a” place; in fact, to
handle this you’d typically use inherit Each car has exactly one driver and each driver only drives one car. Does it not make sense to separate car anance, which involves an
implicit one-to-one relation).
django文档给出了一个great answer:
Django使用OneToOne对继承进行建模(可能在内部使用它,但我还没有签出源代码)。我觉得如果django提供了一个工具,你可以用一种你可以保护的方式来使用它,为什么不使用它呢?如果一辆车只有一个司机,那么在数据库中使用django提供的工具(OneToOneField)来实现这一点似乎是有道理的
假设您有一家公司,并使intranet工具列出所有员工、他们的职位、办公室、部门、薪水等。您将在Django models.py中创建一个类员工,可能如下所示:
但由于某些原因,您不希望所有员工都可以访问薪资,可能在管理区域中有许多具有redactor身份的人,决定将其外包给自己的模型并更改模型员工:
当然还有其他方法隐藏这些信息,但有一种可能是将这些信息分成两个表,即使它们只是简单的1:1关系。
你的公司是一家软件公司,你介绍配对编程。每个员工都有一个配对编程伙伴。它可以只是一个编程伙伴。所以你要重新调整你的模式:
这将是一个递归的一对一关系。
一对一的关系并不常见,在初学者的教程中很难找到,但是如果有一些特定的要求,您会发现自己创建了1:1的关系来解决问题。
这是我工作中的一个真实的例子。我是生物信息学家,为微生物制作软件。它们按属和种分类。每个属可以包含一个或多个种,但一个种只能属于一个属。这是一个明确的1:n关系。但现在,一个属有一个模式种,只有一个而且只有一个。模式种可以属于一个属。我把
models.OneToOneField
放在这里,除了models.ForeignKey
。事先不要太担心1:1的关系。当你遇到一些具体的问题时,你会发现你是否需要1:1的关系。
相关问题 更多 >
编程相关推荐