我一直在改进我以前制作的票证系统,不知道存储票证更新的最佳方法。一些背景-每个票证都可以用一些文本更新,状态可以更新,也可以分配给其他人。
票表大致如下:
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|
|---------|-----|-------|-----------|------|-------|----|----|
这样,只有一个表包含所有更新。我唯一担心的是,当添加注释更新时,状态和assigned_to数据将必须重复。有更好的方法吗?
提前感谢!
user_id
、assigned_to
、status
可以移动到显示票证当前状态的tickets
表中。此外,它可以是tk_opened_date
和tk_updated_date
,而不是tk_date
。
update_id
可以作为主键,tk_updates
表保持tk_id
为外键。您可以使用列assigned
、status
来代替列assigned_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
表中的所有详细信息。
只要有更新,就必须在updates
表中插入一个新行。每当在updates
表中插入新行时,您可以使用触发器更新ticket
表中assigned_to
/status
/tk_updated_Date
的值。