0

小さな Web アプリケーションを構築しようとしています。アプリケーションは、ブックマークとそのタグを保存することです。

ブックマーク: www.javaworld.com
タグ: Java、プログラミング

ブックマーク: www.jquery.com

タグ: Java、ウェブアプリ

現在、私の検索基準はタグに基づいています。ユーザーが Java を検索すると、Java で保存したすべてのブックマークが表示されます。ここでは、www.javaworld.com と www.jquery.com の両方を表示する必要があります。

私のデータベーステーブルは次のようになります

ユーザー (UID、Uname、パスワード)

ブックマーク(BID、UID、bookmark_url、tag1、tag2、tag3、tag4、tag5)

また

ブックマーク(BID,UID,ブックマーク)

タグ(TID、BID、タグ名)

ここで、BID と TID は代理キーです。

私が与えたシナリオを考慮して、この問題を解決するためのより良い方法を提案してください..

4

2 に答える 2

1

Stackoverflow のようなものを作ってみませんか? タグは「グローバル」であり、単一のブックマークにバインドされていません。事前にブックマークを定義しなくてもタグを定義できるため、柔軟性が向上します。また、最初のソリューションのようにタグを 5 つに制限することもお勧めできません。

次のようにそれらを分離すると、集計関数をより適切に実行し (タグクラウドを作成)、タグテーブルを使用して、新しいブックマークのチェックボックス/複数選択でタグをより適切に表示できます。すでに別のブックマークにバインドされていると、気まずくなります。

Table: User [UID, Uname, PW]

Table: Bookmark [BID, UID, url]

Table: Tag [TID, Tagname]

Table: Bookmark_Tag [BID, TID]
于 2012-06-19T08:26:35.343 に答える
0

最初の解決策には次の問題があり
ます。
- 多くの NULL 値を持つ可能性があります。ブックマークに含まれるタグが 5 つ未満の場合、他の列には値が含まれません。このような場合、未使用の列のためにメモリを浪費する可能性があります。
- 検索メカニズムを高速化するには、検索を実行する列 (この場合は tag1,...tag5) にインデックスを付ける必要があります。5 つのタグ列すべてにインデックスを付ける必要があります。

このような理由から、タグ テーブルの「タグ名」属性にインデックスを定義する 2 番目のソリューションを選択することをお勧めします。または、別の方法として、すべてのタグを定義するタグ テーブルを含めることもできます。このような場合、タグ テーブルは、タグの数値 ID (int) を使用してタグ テーブルを参照します。

于 2012-06-19T08:35:00.880 に答える