我需要存储这种关系:
domain -> tag1, tag2, tag3 .... tagN
到msql表。
我想我会有两个像这样的字段
domain | tag_arary
实际数据可能是:
facebook.com | [social, networking, web, foo1, foo2 ]
或者换句话说,就是设置最大数量的标签,并为每个标签添加一个字段:
结构
domain | tag1 | tag2 | tag3
实际数据
facebook.com | social | networking | web | foo1 | foo2
实现此目的的最佳方式是什么。
请注意,我需要添加标签,然后删除标签。
由于
答案 0 :(得分:1)
从长远来看,这可能是最灵活的方式,因为更容易 查询/更新/删除标记。您可能希望将id 添加到域表中,因为在搜索整数字段方面会更快。
CREATE TABLE domains (
domain VARCHAR(255) PRIMARY KEY
);
# table to store all your domain names
INSERT INTO domains (domain) VALUES ('www.facebook.com');
# table to store all the tags you want to have for your application
CREATE TABLE tags (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
tag_name VARCHAR(255)
);
INSERT INTO tags (tag_name) VALUES ('social');
INSERT INTO tags (tag_name) VALUES ('networking');
# Then, you can store all the tags related to a domain in domain_tags table
# It provides one-to-many relationship between a domain and tags.
CREATE TABLE domain_tags (
domain VARCHAR(255),
tag_id INTEGER
);
INSERT INTO domain_tags (domain, tag_id) VALUES ('www.facebook.com', 1);
INSERT INTO domain_tags (domain, tag_id) VALUES ('www.facebook.com',2);
# Whenever you want to get the tags for a domain, simply join the tables together
# and query based on your domain name.
SELECT tag_name
FROM domains d
INNER JOIN domain_tags dt ON d.domain= dt.domain
INNER JOIN tags t ON t.id= dt.tag_id
WHERE d.domain='www.facebook.com';