首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >人有三个地址,地址属于人,最好的做法是什么?

问人有三个地址,地址属于人,最好的做法是什么?
EN

Stack Overflow用户
提问于 2013-12-07 02:34:16
回答 2查看 82关注 0票数 0

在mysql数据库中使用cakephp 2.4.3。人们总是有三个地址。

  1. 注册地址。
  2. 他们现在住的地方。
  3. 他们工作的地方。

这两个表就像人的时间线。(意味着记录会增加加班时间),例如,如果你在现实生活中更改了你的名字。您必须在people表中添加新记录。对一个人来说是这样的。

代码语言:javascript
复制
Year   name           address          address2      address3
2013 Parker boon   13/3 huston,usa  null         332/2 tansania
2014 Parker samel  13/3 huston,usa  23,NY,usa    332/2 tansania
2015 Parker samel  13/3 huston,usa  23,NY,usa    992 osky,russia 

2013年,帕克·布恩( parker )住在他的官邸。2014年,他搬到了美国纽约州23家。2015年,他在俄罗斯工作。

我有两个问题。

首先,我在people表中创建了3个外键(address_id、address2_id、address3_id)和专用的3个地址id,仅供1人使用。在人的餐桌上。people_id(PK),name,address_id(FK),address2_id(FK),address3_id(FK)

在地址表里。address_id(PK),address_name

它比在地址表(people_id)中制作一个外键更好吗?在人的餐桌上。people_id(PK),名称

在地址表里。address_id(PK)、address_name、people_id(FK)、address_type (注册、生活、工作)

第二,我的方法是否不好。我想知道如何配置模型和saveAssociated(),或者如何将事务保存在cakephp中学习。

与蛋糕的链接

EN

回答 2

Stack Overflow用户

发布于 2013-12-07 02:52:45

我认为,这种关系应该如下:-

  1. 用户有一个地址。
  2. 地址属于用户。

在地址上,应该有以下字段:

年,user_id,name,address1,address2,address3和is_active

如果要更改任何地址,则需要使用最后一条记录的克隆生成新记录,并使用状态为活动的更新记录生成新记录,并将前一条记录停用。

举个例子。

如果用户只修改address2

  1. 您将从最后一条记录中复制address1和address3,并将要插入的新记录的状态设置为active。
  2. 关闭最后一张记录。

结论:-在同一时间,只有一个记录是活跃的,所以你可以处理与hasOne的关联。你将能够管理历史变迁的历史。

票数 0
EN

Stack Overflow用户

发布于 2013-12-07 05:11:06

有很多方法可以做到这一点,最好的方法将取决于你对你的应用程序的具体需求-我们现在还不知道说得肯定。

但据我所见,听起来你基本上是想跟踪:( a)一个人( b)一个人的工作地址( c)一个人的家庭地址( d)更改一个人的名字,或者一个人的家庭或工作地址。听起来“注册地址”只是他们最近的家庭住址。

当一个人改名时,我肯定不会在people表中创建一个新记录--他们不是新的人;他们是同一个人,有着不同的名字。同样,对于地址,您不一定希望在某人的地址更改时创建新记录(您可能--取决于您的需求)。

一个非常简单的方法是有一个people表和一个people_histories表。

people表将同时存储个人姓名以及工作人员的工作和家庭地址。people_histories表只跟踪人员表中任何字段的更改。一个'person‘将有许多'person_histories',每个'person_history’记录将指示被更改的字段、更改的日期以及它以前保存的值。

另一种方法是拥有人员、people_histories、addresses和address_histories,并且一个人有一个work_address_id和一个home_address_id。

另一种方式是说一个人的has_many地址,每个地址作为一个角色,要么‘工作’或‘家’,以及日期表明该人何时搬到该地址。一个人最终可能会有这样的结果。10个工作地址,你知道当前的是最近的一个。

实际上,最好的解决方案取决于您想要如何处理人们以前的姓名和地址。如果您只想跟踪它们以便手动查看,而且它们实际上并不是系统的核心部分,那么历史表可以保持简单,并且工作正常。

哦,还有一件事,您应该坚持CakePHP约定,并将您的主键字段命名为'id‘。如果您有多个指向同一个表的foriegn键,而不是将它们命名为address1_id和address2_id,我会将它们命名为描述性的,比如home_address_id和work_address_id。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20436871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档