假设我有两个模型用于RESTful API合同:用户和交付
// User
id | Long
-----------------
name | String
-----------------
street1 | String
-----------------
street2 | String
-----------------
city | String
-----------------
state | String
-----------------
// Delivery
id | Long
--------------------
recipient_id | Long
--------------------
此结构假定交付与用户绑定,而实际上他们将绑定到地址。在三种模型中构建数据似乎更有意义:用户,交付和地址:
// User
id | Long
--------------------
name | String
--------------------
address_id | Long
// Delivery
id | Long
--------------------
recipient_id | Long
--------------------
address_id | Long
--------------------
// Address
id | Long
-----------------
street1 | String
-----------------
street2 | String
-----------------
city | String
-----------------
state | String
-----------------
拥有三个模型的缺点是,如果要获取交付的街道地址,则必须在每个请求上加入。但是,业务逻辑在语义上是这样的。交付与地址相关联,用户也是如此,这是对其关系的恰当描述。如果api响应需要用户和地址之间的联合类型,则可以声明具有来自地址和用户模型的值的UserAddress类型。但我不确定哪一个是正确的方法。请提供一些有关如何做的建议。
答案 0 :(得分:0)
个人观点,第二种结构是合适的。由于总地址(包括街道,城市等)将是单个用户的一个属性,因此我认为将所有这些属性添加到用户信息不是一个好的决定。
中级,如果用户更新他/她的地址怎么办?如果更新的地址已经在地址表中,你只能更改有界的address_id,但如果使用第一个结构,你应该更新所有的地址属性用户。
顺便说一句,从UML方面来看,第二选择也会更好。从流程中可以看出,传递与地址有关,一个地址与一个用户有关。同时,地址仅限于用户,但不是用户的属性,例如:我使用酒店地址作为订单的地址,但如果我已经检查了怎么办?你还要为这种情况更新用户表吗?所以总而言之,我认为第二种选择比第一种选择更好,无论是结构方还是现实方。
希望能为你做一点帮助。 : - )