0

この関係を保存する必要があります:

domain -> tag1, tag2, tag3 .... tagN

msqlテーブルに。

私はこのような2つのフィールドがあると思いました

domain | tag_arary

実際のデータは次のとおりです。

facebook.com | [social, networking, web, foo1, foo2 ]

または、別の方法として、タグの最大数を設定し、各タグのフィールドを設定することもできます。

構造

domain | tag1 | tag2 | tag3 

実際のデータ

facebook.com | social | networking | web | foo1 | foo2 

これを実装するための最良の方法は何ですか。

タグを追加し、タグを削除する必要があることに注意してください。

ありがとう

4

1 に答える 1

1

タグのクエリ/更新/削除がはるかに簡単であるため、これはおそらく長期的には最も柔軟な方法です。ただし、整数フィールドでの検索の点ではるかに高速であるため、domainsテーブルに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';
于 2012-08-12T22:25:51.053 に答える