0

StackOverflow のタグ機能に似た機能を実装しようとしています。ユーザーが新しいタグを作成できること、またはすでに作成されている同様のタグのリストをプルアップすると入力できます。

これはこのサイトの素晴らしい機能であり、ほとんどのサイトにこのような機能がないのは悲しいことです。堅牢でありながら非常に柔軟であり、何よりも優れているのは、コミュニティによって推進されていることです。

だから私はこれらの2つのテーブルを持っています:

Company
    id
    email
    name
    companySize
    countryOfOrigin
    industryid

Industry
    id
    description

ユーザーが新しいタグを作成するたびに、一意の ID を持つタグを作成し、既存のタグを検索できるようにしたいと考えています。

このデータベース設計により、この機能を簡単かつ効率的に実装できますか?

そうでない場合は、少しご指導ください。:)

4

2 に答える 2

1

続けるべき情報はそれほど多くありませんが、リストしたものは問題ないはずです。(「タグ」は業界テーブルの「説明」フィールドなどです)

ご想像のとおり、実際の作業はすべてSQLの外部で行われるため、次のことを行う必要があります...

  1. (潜在的に)まだ存在していない新しいタグを追加します。
  2. 業界を提供されたタグに関連付けます。
  3. (潜在的に)使用されなくなった可能性のある以前に使用されたタグを削除します。

...業界を編集するたびに。

とはいえ、提案された設定の主な制限は、各企業が単一の業界にしか所属できないことです。(つまり、関連付けられる業界タグは1つだけです。)

そのため、次のようなスキーマを検討することをお勧めします...

Company
    id
    ...
    countryOfOrigin

Industries
    id
    description

CompanyIndustriesLookup
    companyID
    industryID

...複数の業界/タグを特定の会社に関連付けることができます。

アップデート...

たとえば、この設定では、会社ID 1に関連付けられているすべてのタグを取得するには、次を使用します...

SELECT Industries.description FROM (CompanyIndustriesLookup, Industries)
WHERE companyID=1 AND industryID=Industries.ID
ORDER BY Industries.description ASC;

同様に、すべての企業に「テスト」業界のタグを付けるには、次を使用します...

SELECT Company.name FROM (Company, Industries, CompanyIndustriesLookup)
WHERE Company.id=CompanyIndustriesLookup.companyID
AND Industries.id=CompanyIndustriesLookup.industryID
AND Industries.description="testing"
ORDER BY Company.name ASC
于 2010-01-23T23:48:56.163 に答える
0

タグを使用するための非常に簡単な (最適ではない場合もありますが、多くの場合問題にはなりません) 解決策は、タグ ID をまったく持たないことです。だから、あなたは持っています:

Items
    ItemId
    Name
    Description
    ...

ItemTag
    ItemId 
    Tag

項目にタグを追加することは、タグが既に存在するかどうかに関係なく、タプルを ItemTag テーブルに追加するだけです。また、タグを削除する際に簿記を行う必要もありません。すべての一意のタグをすばやく表示できるように、ItemTag.Tag のインデックスを保持するだけです。

于 2010-01-24T00:12:34.847 に答える