如何改进表数据库设计

时间:2013-11-24 15:04:12

标签: php jquery mysql database-design

我正在为我的项目网站规划我的数据库方案设计。
这是video表:

enter image description here

在“car”标签页面中,我以这种方式从表中检索(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 } ?>  

这是一个问题:如果我在video表格中存储数百万行,即50万行,这个表格方案设计是好还是我需要创建不同的东西?

感谢任何建议

2 个答案:

答案 0 :(得分:2)

keyword列上使用适当的索引,此设计应该没问题。但是,如果您打算在表中存储如此大量的数据,那么您应该考虑在SQL查询中引入分页。

答案 1 :(得分:1)

好问题。您对存储大量相似值的观察是有效的。

优化设计的解决方案是使用关系表架构。使用关系表,您可以在字段中获取常用值并将它们移动到另一个表,然后创建指向表的链接。

作为一个(不相关的)示例,不是将国家/地区名称存储在字段中一百万次,而是创建一个指向国家/地区列表的字段。好处是你将为一个数字存储(一百万次)几个字节,相比之下(百万次)几百字节的名称。

优势大于存储,因为比字符串比数字更有效。例如,它需要计算机ONE比较来检查是否($ val == 10),相比之下,对一个字符串中的每个字母进行一次检查(想象一下运行检查if($ val ='一个非常长的字符串')一百万次。

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