2013-11-24 41 views
1

我正在規劃我的項目網站的數據庫方案設計。
這是video表:

enter image description here如何改進表數據庫設計

在 「汽車」 標籤頁,我從表中檢索以這種方式(PHP查詢):

sql = "SELECT * FROM `video` WHERE keyword='car'"; 
$result = $db->query($sql); 
if (!$result) { 
} 

<?php  while ($row = $result->fetch_assoc()) { ?> 

<?php echo $row['website']; ?><br> 

<?php echo $row['url']; ?><br><br> 

<?php } ?> 

這是一個問題:如果我儲存的milions video表中的行,即500萬行,這是表格方案設計好還是我需要創建不同的東西?

感謝任何建議

+1

如果什麼視頻在多個網站上?你如何處理多個單一的「關鍵字」? – jeff

+0

我建議你使用:http://datatables.net/ –

回答

2

隨着對keyword列一個適當的指數這個設計應該是罰款。但是如果你打算在表中存儲大量的數據,你絕對應該考慮在SQL查詢中引入分頁。

+0

感謝您的建議。關鍵字列中的「正確索引」意味着什麼? –

+0

只需在此列上創建索引:http://stackoverflow.com/a/2955470/29407如果您不知道SQL中的索引是什麼,並且打算將50M記錄存儲在表中,那麼我會強烈建議你在做這件事之前閱讀有關索引:-) –

1

好問題。你關於存儲大量相似值的觀察是有效的。

優化您的設計的解決方案是使用關係表模式。通過關係表,您可以在字段中使用通用值並將它們移到另一個表中,然後創建表的鏈接。

作爲一個(無關的)示例,不是將國家名稱存儲在一個字段中一百萬次,而是創建一個指向國家/地區列表的字段。好處是,你將爲一個數字存儲(一百萬次)幾個字節,而與(百萬次)幾百字節的名稱相比。

好處大於存儲,因爲比較數字比字符串更有效。例如,比較一次檢查一個字符串中的每個字母(想象一下運行檢查if($ val ='一個很長的字符串')一百萬次)是否需要計算機ONE比較來檢查($ val == 10)。

http://en.wikipedia.org/wiki/Relational_database

例如,假設你有一個關鍵字數量有限。

CREATE TABLE video 
    (
     video_id int(11) NOT NULL auto_increment, 
     keyword_id int(11), 
     website varchar(255), 
     url string, 
     PRIMARY KEY (video_id) 
    ); 

    CREATE TABLE keywords 
    (
    keyword_id int(11) NOT NULL auto_increment, 
    keyword_name varchar(255), 
    PRIMARY KEY (keyword_id) 
    ); 

注意到視頻表中有一個字段keyword_id,而不是KEYWORD_NAME,因此這將存儲一個數字,而不是一個字符串。您的數據的示例將是

- video 
id keyword_id  url 
1  1    http://domain1/path1/ 
2  2    http://domain2/path1/ 
3  2    http://domain3/path4/ 
    : 
- keywords 
keyword_id  keyword_name 
1    short keyword 
2    a long key that has many, many, many characters 

如果您知道關鍵字id,那麼很容易搜索視頻。

SELECT keyword FROM keywords WHERE keyword_name = 'car'; 
    : 
SELECT * FROM video where keyword_id = ':keyword_id'; 

SELECT keyword_name, website, url 
    FROM video 
    JOIN keyword ON keyword_id 
WHERE keyword_name = 'car' 

我還隔着幾個職位來到SO。

Relational Database Design Patterns?

Relational Database and Normalization for Relational Tables

Best way with relation tables

+0

謝謝,非常有趣的建議! –

+0

你能給我舉個例子嗎? –

+0

感謝您的重要幫助! –