1

次のようにテーブルを正規化する方法を知りたいです。

field1|field2|field3
text1 |txt2  | 1,2,5
other1|other2| 1,8,7

フィールド 1 は何度も繰り返されます。フィールド 2 は一意です (繰り返されません)。フィールド 3 - ユーザー ID。お気に入りのようなもの。

4

2 に答える 2

3

まず、フィールド 2 が一意である場合は、主キー (または、少なくとも一意のインデックス) として宣言する必要があります。

第 2 に、field3 に複数の値があるという事実は、field3 が、一意の値 (先ほど決めた field2) を使用して最初のテーブルにリンク (関連付け) された別のテーブルになることを示しています。

したがって、データベース作成スクリプトは次のようになります。

CREATE TABLE MainTable (field2 VARCHAR NOT NULL PRIMARY KEY, field1 VARCHAR)

CREATE TABLE OtherTable (field2 VARCHAR REFERENCES MainTable, field3 INTEGER)

別の主キー値を 2 番目の値に追加するか、field2 と field3 を一緒に主キーにすることも検討してください。

于 2010-11-13T14:56:51.037 に答える
2

このテーブルの主キーを指定し、field3+thisキーを使用して新しいキーを作成します。

マスターテーブル(変更後の元のテーブル)

field1 | field2 | fID
...    | ...    | 1
...    | ...    | 2

お気に入りテーブル:

fID | field3
1   | 1
1   | 2
1   | 5
2   | 1
... | ...

データの選択

JOINまたはWHEREを使用して、結果を取得できます。まあ言ってみれば

SELECT field3 FROM Favorites WHERE fID = 1

取得

1,2,5

ですから、私が間違っていなければ、あなたの質問はmaster-details/parent-childパターンに関連しています。

資力

于 2010-11-13T13:46:37.793 に答える