次のようにテーブルを正規化する方法を知りたいです。
field1|field2|field3
text1 |txt2 | 1,2,5
other1|other2| 1,8,7
フィールド 1 は何度も繰り返されます。フィールド 2 は一意です (繰り返されません)。フィールド 3 - ユーザー ID。お気に入りのようなもの。
まず、フィールド 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 を一緒に主キーにすることも検討してください。
このテーブルの主キーを指定し、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パターンに関連しています。
資力