0

まず、調べてみましたが、新参者で言葉に詳しくないので、正しい言葉を見つけられなかったかもしれません。重複の可能性がある場合はご容赦ください。

質問1:

からなるテーブルがありますID [PK] and LABEL [Varchar 128]。ここの各レコード (行) は一意です。私が望むのは、これらの LABELS 間の関係を定義することです。

必要条件:

n 個のグループがあり、各グループにはこれらの LABELS が 1 つ以上含まれています。各グループでは、各 LABEL が存在する場合と存在しない場合があります (グループに同じ LABEL が 2 つ存在しないことを意味します)。

この関係をどのように定義すればよいでしょうか?

で別のテーブルを作成することを考えましたID [PK] - Group ID [randomly assigned unique key] - LABEL_ID [ID of Labels table pointing to a single Label]

これは正しくて有利ですか?グループに 10 個の LABELS がある場合、一意の ID を持つ 10 個のレコードがあり、同じ一意に割り当てられ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

「SQL を使用するか、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
)

ここでは、すべてのラベルは一意です。多くのラベルが各グループに含まれ、各ラベルが多くのグループに含まれる場合がありますが、各ラベルは各グループに 1 回しか含まれません。

@Damien_The_Unbeliever が示すように、テーブルの列を一意にGroupすることで、各グループに関する追加の属性を保存する必要がない場合は、テーブルを省略できます。GroupIdGroupLabels

使用している RDBMS によっては、構文を少し変更する必要がある場合があります。

于 2012-05-23T13:17:38.460 に答える
1

このテーブルのID列は実際には必要ありません。GroupLabels

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 に答える