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


How is best to setup MySQL 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|
|---------|-----|-------|-----------|------|-------|----|----|

这样,只有一个表包含所有更新。我唯一担心的是,当添加注释更新时,状态和assigned_to数据将必须重复。有更好的方法吗?

提前感谢!

user_idassigned_tostatus可以移动到显示票证当前状态的tickets表中。此外,它可以是tk_opened_datetk_updated_date,而不是tk_date

update_id可以作为主键,tk_updates表保持tk_id为外键。您可以使用列assignedstatus来代替列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的值。