2016-07-06 3 views
-1

私はこのウェブアプリを投稿、リンク用に書いています。ユーザーはこれらのリンクや投稿にカテゴリを追加することになります。これらのカテゴリの数は、ウェブサイトが大きくなるにつれて増加します。 SQLスキーマでこれを実装するにはどうすればよいですか?私はどのデータ型を使うべきですか? TEXTデータ型はユーザーの投稿を保存するのに適していますか?SQLでカテゴリのスキーマを設計するにはどうすればよいですか?

+0

あなたのアプリを書いている言語は何ですか?私が提案しているのは、「タグ」に関する少しの研究です。なぜなら、あなたがそれらをどのように設定するかで行われた多くの作業があることを知っているからです。そして、それはあなたが設定しているものです。 – MageeWorld

+0

投稿には 'TEXT'と' VARCHAR'の両方が動作します(MySQL 5.0以降では最大65KBです)。 –

+0

私はgolangを使うつもりです。 –

答えて

1

明らかに、最初にあなたがすべきことは、すでにこれを行う既存の仕事のためにGitHubや他の場所をサーフィンすることです。 (たぶん、あなたは、単にが既に書き込まれている何かを使用することができます!)

理論的に言えば、「リンク/ポスト」と「カテゴリ」の関係が呼ばれ多対多。は(リンク/ポスト「多」の属性を有することができ、そして指定された属性は、「多くの」リンク/ポストに割り当てることができる)ため、中間テーブルは、以下の簡単な例のように、使用されている:

CREATE TABLE LINKS_POSTS (LINK_ID INTEGER, CONTENT TEXT) PRIMARY KEY (LINK_ID); 

CREATE TABLE ATTRIBS (ATTRIB_ID INTEGER, ATTRIB_NAME TEXT) PRIMARY KEY (ATTRIB_ID); 

今魔法...

CREATE TABLE LINKS_POSTS_ATTRIBS (LPA_ID INTEGER, LINK_ID INTEGER NOT NULL, 
ATTRIB_ID INTEGER NOT NULL) PRIMARY KEY (LPA_ID) 
FOREIGN KEY (LINK_ID) REFERENCES LINKS_POSTS (LINK_ID) 
FOREIGN KEY (ATTRIB_ID) REFERENCES ATTRIBS (ATTRIB_ID); 

CREATE UNIQUE INDEX FOOBAR ON LINKS_POSTS_ATTRIBS(LINK_ID, ATTRIB_ID); 

...(またはそのような何か!)私は私の頭の上にこれをオフに書いているので、tpyosまたはsintax erursがあるかもしれません。 ;-)

与えられた投稿に特定の属性がある場合、LINKS_POSTS_ATTRIBSテーブルのエントリがそれを表します。 FOREIGN KEY属性では、値が外部テーブルの既存のエントリと一致する必要があることが規定されています。 UNIQUE INDEXは重複を避けます。

さらに、「参照整合性」制約を使用して、たとえば、LINKS_POSTS_ATTRIBSエントリが参照されている場合に属性行が削除されないことを規定する必要があります。

関連する問題