我喜欢Kyle和Travis 的建议,但您也可以将外键放在另一个方向。
如果您希望您的地址是独立的并且有几个其他表引用它们,那么您应该能够定义两个从客户到地址的belongsTo 关系。然后,每个关系都必须指定使用哪个字段作为外键。
<?php
class Customer extends AppModel {
var $name = 'Customer';
var $belongsTo = array(
'BillingAddress' => array(
'className' => 'Address',
'foreignKey' => 'billing_address_id'
),
'MailingAddress' => array(
'className' => 'Address',
'foreignKey' => 'mailing_address_id'
)
);
}
?>
但是,这两种解决方案都会让您对孤立地址开放,因为外键约束并不真正正确。最简单的解决方案可能是在地址表中添加一堆可选的外键,例如customer_id, company_id,employee_id等等。然后你就有了一个标准的弧形图案,并且键指向正确的方向,所以你得到了正确的参照完整性。
另一种解决方案是设计一个更通用的实体表,将地址作为子表。那么客户、公司和雇员都是实体表的子类型。有关这种模式的更多详细信息,我推荐David Hay 的Data Model Patterns。