2012-07-30 80 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