gpt4 book ai didi

mysql - People 有 3 个地址,地址属于 People,最佳实践是什么?

转载 作者:行者123 更新时间:2023-11-30 00:57:21 26 4
gpt4 key购买 nike

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

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

这两个表就像人们的时间线一样。(意味着记录随着时间​​的推移而增加)例如,如果您在现实生活中更改了名字。您必须在人员表中添加新记录。对于 1 人来说是这样的。

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 年,帕克·布恩住在他登记的地址。2014年,他搬到了美国纽约23号。2015 年,他在俄罗斯工作。

我有 2 个问题。

首先,我在People表中创建了3个外键(address_id,address2_id,address3_id)并为 1 个人提供专用的 3 个地址 ID。在人员表中。people_id(PK),姓名 ,地址_id(FK),地址2_id(FK),地址3_id(FK)

在地址表中。地址 ID(PK) ,地址名称

这比在地址表 (people_id) 中创建 1 个外键更好吗?在人员表中。people_id(PK) ,名称

在地址表中。地址 ID(PK) ,地址名称,people_id(外籍) ,地址类型,(登记、居住、工作)

第二,我的方法到底好不好。我想知道如何配置模型和saveAssociated() 或用 cakephp 中的事务保存以供学习。

link to cake saveassociated

最佳答案

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

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

地址中应该有以下字段:-

年份、user_id、名称、地址 1、地址 2、地址 3 和 is_active

如果任何地址发生更改,您需要通过克隆最后一条记录来生成新记录,并更新一条状态为事件的记录,并停用前一条记录。

举个例子。

如果用户只修改了地址2---------

  1. 您将复制最后一条记录中的地址 1 和地址 3,并将要插入的新记录的状态设置为事件。

  2. 停用最后一条记录。

结论:-一次只有一条记录处于事件状态,因此您可以处理与 hasOne 的关联。您将能够管理历史更改的历史记录。

关于mysql - People 有 3 个地址,地址属于 People,最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com