2013-10-09 27 views
1

我有一個當前的數據庫結構,似乎爲索引目的拆分了一些數據。主要的tickets表具有更多「精簡」字段,例如外鍵,整數和日期,tickets_info表具有可能較大的數據,如文本字段和斑點。這是一個好主意繼續,還是應該結合表格?聯合或分開的表

例如,目前的結構看起來是這樣的(假設有一個外鍵索引中的一個一對一的關係):

`tickets` 
-------------------------------------------- 
id | customer | vendor | opened 
-------------------------------------------- 
1 |  29 |  0 | 2013-10-09 12:49:04 

`tickets_info` 
-------------------------------------------- 
id | description   | more_notes 
-------------------------------------------- 
1 | This thing is broken! | Even longer... 

我的應用程序比插入/更新方式更多SELECT,所以我可以看到一個概覽頁面(每頁250+個結果列表)一次查詢大量票據列表時,拆分的理論優勢。然後在頁面上使用較大的細節,通過簡單的JOIN(在外鍵上的幾個其他聯接中)顯示一張票和它的詳細信息。

這些表格目前是MyISAM,但是如果這樣做有什麼區別,我會將它們轉換爲InnoDB。 tickets表中目前大約有33列,tickets_info表中有4列; tickets_info表可能會有更多的列,具體取決於安裝(我已經實現類似於PHPBBv3的「自定義字段」)。

+1

如果有機會,你可能只需要在一個表(或部分)的信息不加入他們,那麼最好是讓他們分開。如果你總是加入他們,那可能是另一回事。這也取決於你對錶格進行了哪種搜索。您可能確實想要將第一個錶轉換爲InnoDB以獲得更好的性能;不確定其他有多個文本字段的表格,特別是如果您在插入條目後不打算修改條目。 – Ashalynd

+0

我實際上必須創建第二個表InnoDB,以便我可以爲主表創建一個外鍵,以便它們保持鏈接。感謝您的意見。 – Demonslay335

回答

1

我覺得這個設計很好。門票表格不僅用於顯示單張門票信息,還用於計算(即在特定日期售出的門票總數)和其他分析(銷售該門票的門票數量爲多少)。

添加tickets_info將增加您的ticket表的大小,但沒有任何好處,但會增加對ticket表的訪問時間。我認爲票據表上的良好索引應該保證您的安全,但MySql不是一個柱狀數據庫,所以我期望有一個大的varchar或blog字段的行需要更多的資源。

除此之外,如果您使用ticket_info進行單票查詢,我認爲當您查詢該表時,您已經獲得了良好的性能。

所以我的建議是離開它喜歡它:)

+0

感謝您的輸入,它的統計部分的優點;這對這個系統的發展無疑是一個巨大的因素。有時你只需要再次確認你做的事情是正確的,哈哈。 :) – Demonslay335

+0

我知道這個問題都是關於再保證的,你寫了所有必要的細節給你一個完整的答案,對我來說,這意味着你已經清楚瞭解你的問題以及你想達到的目標:) – mucio