关于如何构建数据模型的思考

Thoughts on how to structure data model

假设我有两个模型用于 RESTful API 合同:用户和交付

// User

id      | Long
-----------------
name    | String
-----------------
street1 | String
-----------------
street2 | String
-----------------
city    | String
-----------------
state   | String
-----------------


// Delivery

id           | Long
--------------------
recipient_id | Long
--------------------

此结构假定交付与用户相关联,而实际上它们与 绑定到地址 。将数据结构化为三种模型似乎更有意义:User、Delivery 和 Address:

// 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 类型,该类型具有来自地址和用户模型的值。但我不确定哪一个是 正确的 方法。请就此处的操作提供一些建议。

个人想法,第二种结构应该是suitable。由于总地址(包括街道、城市等)将是单个用户的一个属性,因此我认为将所有这些属性添加到用户信息中并不是一个好的决定。

其次,如果用户更新his/her地址怎么办?如果更新的地址已经在地址table中,则只能更改有界address_id,但如果使用第一个结构,你应该更新用户的所有地址属性。

顺便说一句,从 UML 方面来看,第二个选择也会更好。从流程上看,投递是用地址来绑定的,一个地址绑定一个用户。同时,地址只与用户绑定,不属于用户的属性,例如:我用酒店地址作为订单地址,但如果我已经退房了怎么办?对于这种情况,您还可以更新用户 table 吗?

所以总而言之,我认为第二种选择比第一种选择更好,无论是从结构方面还是现实世界方面。

希望能对您有所帮助。 :-)