0

首先,我进行了研究,但作为一个新手,我对单词不太熟悉,因此可能无法找到正确的单词。万一可能重复,请见谅。

问题一:

我有一张由ID [PK] and LABEL [Varchar 128]. 这里的每条记录(行)都是唯一的。我想要的是,定义这些标签之间的关系。

必备:

将有n个组,每个组包含一个或多个这些标签。在每个组中,每个 LABEL 可以存在或不存在(意味着一个组没有 2x 个相同的 LABEL)。

我应该如何定义这种关系?

我想创建另一个表ID [PK] - Group ID [randomly assigned unique key] - LABEL_ID [ID of Labels table pointing to a single Label]

这是正确和有利的吗?如果一个组有 10 个 LABELS,那么将有 10 条具有唯一 ID 的记录,相同的唯一分配Group ID and LABEL_ID指向 LABELS 表。

问题2:

我应该放弃关系解决方案(如上所述)并选择 NoSQL 解决方案吗?其中每个组都作为一个单独的条目单独存储到数据库中,并带有ID [PK] - Data [Containing either labels or IDs of labels pointing to the Label table]?

如果 NoSQL 是要走的路,我应该如何存储这些数据?

a) 我应该有 ID - 数据(包含标签)吗?b) ID - 数据(包含标签的 ID)?

问题 3:

如果这里的 NoSQL 解决方案是最好的方法,我应该为这个用例选择哪个 NoSQL 数据库?

谢谢你。

4

2 回答 2

1

这里的信息太少,无法就“to SQL or not to SQL”这个问题提出建议。

但是,我认为关系方法将如您所描述的那样。

CREATE TABLE Group
(
    GroupId int PRIMARY KEY
)

CREATE TABLE GroupLabel
(
    GroupId int FOREIGN KEY REFERENCES Group,
    LabelId int FOREIGN KEY REFERENCES Label,
    UNIQUE (GroupId, LabelId)
)

CREATE TABLE Label
(
    LabelId int PRIMARY KEY,
    Value varchar(100) UNIQUE
)

在这里,每个标签都是唯一的,每个组中可能有很多标签,每个标签可能在很多组中,但每个标签只能在每个组中出现一次。

正如@Damien_The_Unbeliever 所指出的,Group如果您不需要通过使表GroupId上的列GroupLabels唯一而存储有关每个组的任何其他属性,则可以省略该表。

对于正在使用的任何 RDBMS,您可能需要稍微更改语法。

于 2012-05-23T13:17:38.460 回答
1

此表中没有真正需要IDGroupLabels

CREATE TABLE GroupLabels (
     GroupID int not null,
     LabelID int not null,
     constraint PK_GroupLabels PRIMARY KEY (GroupID,LabelID),
     constraint FK_GroupLabels_Groups FOREIGN KEY (GroupID) references Groups,
     constraint FK_GroupLabels_Labels FOREIGN KEY (LabelID) references Labels
)

通过执行上述操作,我们自动实现了一个约束——同一个标签不能多次添加到同一个组中。

综上所述,我想说这是一个相当常见的 SQL 解决方案。

于 2012-05-23T13:28:54.707 回答