gpt4 book ai didi

php - 构建多关系注释或更新表的最佳方式是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 23:42:03 25 4
gpt4 key购买 nike

首先,我知道这听起来像是一个主要基于观点的问题。但我真的不是要求任何人提供不同的选择,而是要求以下哪一项是最好的。

What I want to know is out of the below options, which is considered the closest to best practice, and which is considered a clean approach?


Please note: I'm using php to handle information I/O so some options may require extra processing to complete a transaction.

问题

我在一家销售不同种类产品的公司工作,并且有多个我们想要跟踪的用户交互页面。

解决方案

我提出的解决方案是创建一个关系表来保存发生的所有更新。 IE。当一个新行插入到表中时,另一行插入到 updates 表中,说明该项目是在 2015-11-20 13:05:34 上创建的user_id => 1。更改一行时,将在 updates 表中插入一个新行,其中包含日期和时间以及一条说明它是上次修改时间的注释。为了创建这个解决方案,我将想法缩小为几个选项。


** 选项 1

创建一个名为 updates 的表,其中为每种类型的行添加一列,前缀为 _id,一个 user 列说明执行者操作、日期时间列和保存操作内容的列。结果看起来类似于:

+----+-------+-------+------------+-----------+----------+-----------+--------+
| id | time | user | action | design_id | image_id | upload_id | ..._id |
+----+-------+-------+------------+-----------+----------+-----------+--------+
| 1 | NOW() | 1 | "Deleted" | | 15 | | |
| 2 | NOW() | 10039 | "Created" | | | 50678 | |
| 3 | NOW() | 30845 | "Modified" | 11 | | | |
+----+-------+-------+------------+-----------+----------+-----------+--------+

然而,需要创建大约 15-20 个 *_id,并且每次我们添加一个功能时,我们都需要添加另一个 *_id此表的列。


** 选项 2

创建一个名为 updates 的表,其中包含一个 referring_id 列和一个 type 列。基本上,type 将对应于操作发生的表,而 referring_id 将对应于特定行。结果看起来类似于:

+----+-------+-------+------------+----------+--------------+
| id | time | user | action | type | referring_id |
+----+-------+-------+------------+----------+--------------+
| 1 | NOW() | 1 | "Deleted" | "image" | 15 |
| 2 | NOW() | 10039 | "Created" | "upload" | 50678 |
| 3 | NOW() | 30845 | "Modified" | "design" | 11 |
+----+-------+-------+------------+----------+--------------+

我认为这可能是最好的选择,因为它到位后,无需添加额外的列,而且看起来更易于阅读。


** 选项 3

创建一个名为 updates 的表,其中没有任何关系 ID,只是用户 X 在特定时间创建/修改/删除了某些内容。将名为 update_ids 的列添加到每个表中,该表将包含一个 JSON 或 serializedArray 字符串,其中包含与 updates 表中的 id 对应的 ID 数组.结果将与此类似:

更新

+----+-------+-------+------------+
| id | time | user | action |
+----+-------+-------+------------+
| 1 | NOW() | 1 | "Deleted" |
| 2 | NOW() | 10039 | "Created" |
| 3 | NOW() | 30845 | "Modified" |
+----+-------+-------+------------+

图片

+----+-------+------------------------------------------------+-----------+
| id | user | filename | updates |
+----+-------+------------------------------------------------+-----------+
| 1 | 1 | "085c30fce08b794130fe83f6967e03c3c7ecab8e.jpg" | "[1]" |
| 2 | 10039 | "2387c0f43311c7bb2dc0c82c264d8ffaa09df570.png" | "[2]" |
| 3 | 30845 | "699ee87816bc9b253a864a999ff92e3c6f0696c5.svg" | "[3]" |
+----+-------+------------------------------------------------+-----------+

I sincerely appreciate any light you can shed on this subject.

最佳答案

选项 1 不可取,不符合正常形式。

选项 2 是在这种情况下我会立即想到的选项,因为它正是我们所说的关系描述。但是,如果您需要频繁查询 updates 表,那么查询可能会变慢。如果这将在遥远的将来某个时间发生,那么您将需要创建措施来使用 updates 表,可能是缓存或帮助表。不要过早地优化它,但你应该知道,你需要优化它的时间迟早会到来。

选项3查询难度大。想象一下,当您想根据一小组用户 ID 查询 updates 时。这就是痛苦的定义。但是,如果您允许选项 3,因为您永远不需要做那样的事情,那么这也可能是可行的。

关于php - 构建多关系注释或更新表的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832926/

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