我一直在致力于改进我不久前制作的票证系统,但不知道存储票证更新的最佳方式。一些背景 - 每张票证都可以用一些文本进行更新,状态可以更新并可以分配给其他人。
门票表大致如下所示:
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_id
、signed_to
、status
可以移动到 tickets
表,该表显示工单的当前状态。
此外,它也可以是 tk_opened_date
和 tk_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/