0

我正在尝试实现类似于 StackOverflow 的标签功能的功能。用户可以创建一个新标签,或者通过键入拉出已创建的类似标签列表。

这是这个网站上的一个非常棒的功能,我很遗憾大多数网站都没有这样的功能。它既强大又非常灵活,最重要的是:由社区驱动。

所以我有这两张表:

Company
    id
    email
    name
    companySize
    countryOfOrigin
    industryid

Industry
    id
    description

每次用户编写新标签时,我都想创建一个具有唯一 ID 的标签,并且还能够搜索现有标签。

这种数据库设计是否允许轻松有效地实现此功能?

如果没有,请给一点指导。:)

4

2 回答 2

1

虽然没有大量信息可以继续,但您列出的内容应该没问题。(“标签”是行业表中的“描述”字段等)

正如您可能想象的那样,所有实际工作都在 SQL 之外完成,您需要在其中...

  1. (可能)添加尚不存在的新标签。
  2. 将行业与提供的标签相关联。
  3. (可能)修剪以前使用的可能不再使用的标签。

...每次编辑行业时。

也就是说,您提议的设置的主要限制是每家公司只能属于一个行业。(即:它只能有一个与之关联的行业标签。)

因此,您可能需要考虑以下架构...

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 回答