2012-07-30 77 views
0

我正在创建一个关于IT问题的票证系统。我有以下表格:IT支持mySQL数据库结构

id       
userID         
priority           
details        
rank         
conversation         
order         
status         
ts 

我需要的是能够显示IT部门和用户的通话之间来回。所以我想我有两列conversationorder。列conversation将是一个唯一的标识符(编号或文本),顺序将显示该行在对话中的排列顺序(1,2,3等)。

我的问题是这样的:

  1. 这是去了解它的最佳方式?
  2. 我应该如何识别每个对话?

我可以生成随机的PHP 5字符文本或其他东西,或给一个数字,并且每个用户有会话号码1,号码2等。但是那么如果我这样做了,我将如何找出下一个数字用于使用mySQL的用户?

任何想法和建议将是有益的,谢谢。

回答

1

我会去提供一个像@Debock提到的单独的表。我构建了一点,虽然是不同的:

create table ticket_conversation (
    id      int not null auto_increment primary key 
, ticket_id    int not null 
, user_id    int not null 
, conversation_text  text 
, conversation_timestamp timestamp default current_timestamp 
, foreign key ticket_id references ticket(id) 
, foreign key user_id references user(id) 
, key(ticked_id, conversation_timestamp) 
) 

时间戳允许你跟踪作出评论时,和排序由它会给你的意见的序列。

+0

阿哈,按时间戳排序的确很有意义。我曾经通过JOIN在我的SQL中连接表,但是我不认为我已经建立了一个具有外键的表,我想知道phpMyAdmin是否可以做到这一点? – Chud37 2012-07-30 11:51:33

+0

找到了关系视图。谢谢,我想我会在这之前给出它,这很有意义。 – Chud37 2012-07-30 11:58:35

+0

@ Chud37无论外键约束的存在如何,您都可以连接表。外键约束的目的是确保不能添加“孤立”注释。即外键是一种完整性功能,不会改变您查询数据库的方式。我在我的代码中添加了外键约束来解释如何使用列。如果您想逐字复制设计,则由您决定。 – 2012-07-30 11:59:50

2

我可能会将对话存储在具有唯一ID的不同表中,并将该ID链接到票据表中。

这个其他表格可能包含“来回”序列的自动递增ID,当然还有全局对话密钥(存储在您的票据表中)和对话(行)本身。

我也建议你存储支持技术的用户名以及支持者,这样它仍然清楚谁说什么。

为了清晰起见,您也可以添加时间戳。

0

SQL表通常有一列存储称为主键的唯一标识符。主键可以是自动生成的整数。所以你不需要为尝试在PHP中创建唯一标识符而大惊小怪。

我会建议一些关于数据库的紧张阅读以及它们如何工作应该在不久的将来。尝试Database Design for Mere Mortals。它将给你一个很好的基础,既有可能的,也有从db设计的角度来看如何解决问题的。

+0

好吧我了解主键等,那么如果我需要能够从表中选择所有属于特定<对话>的门票,我将如何使用字段?我需要知道所有的字段才能选择并返回它们。 – Chud37 2012-07-30 11:47:50

+0

创建对话时,您可以使用last_insert_id()获取对话ID。然后,当你想要对话中的所有帖子时,你可以选择* FROM posts WHERE conversation_id = x'。 – dnagirl 2012-07-30 11:53:13