Mysql 如何在CakePHP中处理具有多个地址的客户

Mysql 如何在CakePHP中处理具有多个地址的客户,mysql,database-design,cakephp,Mysql,Database Design,Cakephp,我正在建立一个跟踪客户订单的系统。每个订单将有三个地址;主要联系地址、账单地址和发货地址。我不想在我的订单表中有三个地址的列,我想从一个单独的表中引用它们,并有一些方法来枚举条目,以便我可以确定地址是主地址、发货地址还是账单地址。在地址表中为AddressType创建一列并枚举该列,或者创建另一个表AddressTypes来定义地址枚举并链接到该表,这有意义吗 我还发现了其他与这个话题相关的问题,这就是我选择我的模型的地方。我面临的问题是将其纳入cakePHP公约。我一直在努力将关系形成的方向内

我正在建立一个跟踪客户订单的系统。每个订单将有三个地址;主要联系地址、账单地址和发货地址。我不想在我的订单表中有三个地址的列,我想从一个单独的表中引用它们,并有一些方法来枚举条目,以便我可以确定地址是主地址、发货地址还是账单地址。在地址表中为AddressType创建一列并枚举该列,或者创建另一个表AddressTypes来定义地址枚举并链接到该表,这有意义吗

我还发现了其他与这个话题相关的问题,这就是我选择我的模型的地方。我面临的问题是将其纳入cakePHP公约。我一直在努力将关系形成的方向内在化——文档状态给我的感觉是向后的

任何帮助都将不胜感激


谢谢

你真是恰到好处。这两种方法都可以,具体取决于您希望数据库正常化的程度。就我个人而言,我会使用AddressType模型,它让您可以灵活地随意添加和删除地址类型


如果您希望它更简单,那么我只需要在您的地址模型中使用一个
ENUM()
字段。

我更愿意将hasOne、hasMany和hasandbelongtomany看作三种真正的关系类型

belongsTo关系只是与前两个(一个/多个)的作用相反

如果你看,你会注意到hasOne/belongsTo和hasMany/belongsTo的配对

另外,请注意,“belongsTo”是存储外键的型号(例如
地址\类型\ id

因此,在您的情况下,由于一个地址类型有许多地址(即,您可以有许多家庭地址),那么地址就属于地址类型(即,每个地址都需要一个
地址类型\u id
)。

表1:地址类型(id,name,active)

表2:客户(id、姓名、活动等)

表3:地址(id、地址类型、客户id、国家、城市、街道等)


这样,客户可以拥有您想要的任意多个地址。如果您需要添加新的地址类型,则不得更改客户或地址表。

我同意,在查找表的情况下,
belongsTo
关系的极性会让人感到尴尬和颠倒(这就是您正在谈论的和
地址类型
表)。一个
地址
在自然语言中并不真正属于
地址类型
,但它有足够的技术意义,我已经能够克服它了。然而,这在学习曲线中是一个奇怪的位置。活动列是否表示当前应使用的地址?可选的“活动”列是布尔值,表示当前有效(非过时)的地址类型。例如,如果您不想在应用程序中再使用“工作地址”类型,但存在与该地址类型对应的记录,您不想从数据库中删除这些记录。