2013-11-24 40 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

感谢您的重要帮助! –