php - 如何最好地设置 MySQL 关系数据库?

标签 php mysql sql database relational-database

我一直在致力于改进我不久前制作的票证系统,但不知道存储票证更新的最佳方式。一些背景 - 每张票证都可以用一些文本进行更新,状态可以更新并可以分配给其他人。

门票表大致如下所示:

tickets:

|tk_id|tk_status|tk_opened_by|tk_assigned|tk_room|tk_problem|tk_date|tk_time|
|-----|---------|------------|-----------|-------|----------|-------|-------|

目前,当更新票证(通过评论、状态更改或分配)时,会使用不同的表。它们如下:

tk_update:

|update_id|tk_id|user_id|comment|date|time|
|---------|-----|-------|-------|----|----|


tk_status:

|status_update_id|tk_id|user_id|status|comment|date|time|
|----------------|-----|-------|------|-------|----|----|


tk_assign:

|assign_id|tk_id|user_id|assigned_to|comment|date|time|
|---------|-----|-------|-----------|-------|----|----|

当前的设置意味着从票证的 3 个表中提取数据,然后在网页上显示数据之前对它们进行排序。我正在考虑将设置更改为如下:

tickets:

|tk_id|tk_status|tk_opened_by|tk_assigned|tk_room|tk_problem|tk_date|tk_time|
|-----|---------|------------|-----------|-------|----------|-------|-------|

tk_updates:

|update_id|tk_id|user_id|assigned_to|status|comment|date|time|
|---------|-----|-------|-----------|------|-------|----|----|

这样就只有一个表包含所有更新。我对此唯一关心的是,当添加评论更新时,必须复制状态和分配给数据。有没有更好的方法来做到这一点?

提前致谢!

最佳答案

user_idsigned_tostatus 可以移动到 tickets 表,该表显示工单的当前状态。 此外,它也可以是 tk_opened_datetk_updated_date,而不是 tk_date

update_id 可以是 tk_updates 表的自动增量主键,将 tk_id 作为外键。 您可以将列显示为 signed_to/status/,而不是列为 signed_to/status/,这些列可以更新为这些值中的任何一个变化。

此表将显示票证的历史记录。

示例:

tickets:

|tk_id|tk_status|tk_opened_by|tk_assigned|tk_room |tk_problem|tk_opened_date|tk_updated_date|
|-----|---------|------------|-----------|--------|----------|--------------|---------------|
|123  |CLOSED   |john        |wren       |somedata|somedata  |01/08/2016    |08/08/2016     |

tk_updates:

|update_id|tk_id|user_id|assigned|status    |comment                  |date      |time    |
|---------|-----|-------|--------|----------|-------------------------|----------|--------|
|1        |123  |AAA    |null    |open      |opened ticket            |01/08/2016|00:00:00|
|2        |123  |AAA    |John    |open      |ticket assigned to John  |01/08/2016|00:00:00|
|3        |123  |AAA    |John    |inprogress|now in inprogress        |01/08/2016|00:00:00|
|4        |123  |BBB    |Wren    |inprogress|John assigned to Wren    |01/08/2016|00:00:00|
|5        |123  |BBB    |Wren    |closed    |fixed, closing now       |08/08/2016|00:00:00|

每张票证在更新表中只有一行,其中包含当前状态和所有详细信息。

每当有更新时,都必须在 updates 表中插入新行。您可以使用触发器来更新 ticket 表中的 signed_to/status/tk_updated_Date 值,只要有新的在 updates 表中插入行。

关于php - 如何最好地设置 MySQL 关系数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824447/

相关文章:

javascript - Sequelize : update by column it's old value

java - PK溢出怎么办?

javascript - 为 javascript 创建正则表达式

MySQL FullText bool 模式 : searching keywords that contain '+' as part of the string

php - 迁移到 Laravel 破坏了用户表上的密码字段,该字段曾经是 32 个字符长

mysql - 两个表格按类别显示

sql - 优化 SQL 查询 : find items that are geographically touching, 但没有关联

javascript - 在js文件中加载php函数并使用函数

php - 使用 odbc 将 SQL 查询转换为 csv

php - 游戏库存数据库外键