好问题。你关于存储大量相似值的观察是有效的。
优化您的设计的解决方案是使用关系表模式。通过关系表,您可以在字段中使用通用值并将它们移到另一个表中,然后创建表的链接。
作为一个(无关的)示例,不是将国家名称存储在一个字段中一百万次,而是创建一个指向国家/地区列表的字段。好处是,你将为一个数字存储(一百万次)几个字节,而与(百万次)几百字节的名称相比。
好处大于存储,因为比较数字比字符串更有效。例如,比较一次检查一个字符串中的每个字母(想象一下运行检查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
如果什么视频在多个网站上?你如何处理多个单一的“关键字”? – jeff
我建议你使用:http://datatables.net/ –