<p>奇怪的是有这么多不同的答案,我猜每个人都有自己的喜好。我会这样做:</p>
<pre><code>class Airport(models.Model):
name = models.CharField(max_length=200)
class Airline(models.Model):
name = models.CharField(max_length=200)
terminals = models.ManyToManyField('Terminal', related_name='airlines')
class Terminal(models.Model):
name = models.CharField(max_length=200)
airport = models.ForeignKey('Airport', related_name='terminals')
</code></pre>
<p>这允许并假设以下条件:</p>
<ul>
<li>一家航空公司可以有一家或几家
给定机场的更多航站楼</li>
<li>一个终端可以有多个
航空公司</li>
<li>终端只能存在于
单一机场</li>
</ul>
<p>请注意,在此设置中,机场和航空公司始终通过终端间接连接。我个人认为这是一个特性而不是一个bug。机场总是至少有一个航站楼,即使航站楼是整个机场。你知道吗</p>
<h2>或者</h2>
<p>从逻辑的角度来看,您可能认为这样创建模型更为正确:</p>
<pre><code>class Airport(models.Model):
name = models.CharField(max_length=200)
class Airline(models.Model):
name = models.CharField(max_length=200)
class Terminal(models.Model):
name = models.CharField(max_length=200)
airport = models.ForeignKey('Airport', related_name='terminals')
airlines = models.ManyToManyField('Airline', related_name='terminals')
</code></pre>
<p>实际上,这些数据的表现基本相同。然而,有人可以提出一个论点,认为一个航站楼拥有“航空公司”,在概念上比一个给定的航空公司拥有航站楼更有意义。毕竟,航空公司不包含终端,但每个终端都包含这些航空公司。你知道吗</p>