データベース列へのリストの保存: 正規化とジャンクション テーブル
データベース内にオブジェクトのリストを保存する必要がある場合FOO オブジェクトに関連付けられたフルーツのリストなどの列、正規化とジャンクション テーブルの選択
正規化 は、単一列にリストを格納することを禁止します。このアプローチでは、リスト項目用に別のテーブルが作成され、データの整合性が維持され、冗長性が削減されます。
ただし、フルーツ リストの場合、このアプローチは理想的ではありません。フルーツ ID は固定され、別のテーブルに保存されます。正規化では、リスト内のフルーツごとにフルーツ テーブルに新しい行を作成する必要があり、データの肥大化と複雑化が生じます。
ジャンクション テーブルは、一方、代替ソリューション。これにより、FOO オブジェクトとフルーツ リストの間に多対多の関係が確立されます。ジャンクション テーブルの各行は、特定の FOO オブジェクトと特定のフルーツの間の関連付けを表します。
ジャンクション テーブルの実装方法の例を次に示します。
CREATE TABLE FOO ( id int primary key not null, int1 int, int2 int, int3 int ) CREATE TABLE Fruits ( id int primary key not null, name varchar(30) ) CREATE TABLE FOOFruits ( FruitID int references Fruits (ID), FooID int references FOO(id), constraint pk_FooFruits primary key (FruitID, FooID) )
リンゴを追加するにはジャンクション テーブルを使用して、ID=5 の FOO オブジェクトのリストを作成します。
INSERT FOOFruits(FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name = 'Apple'
このアプローチでは、正規化の必要性がなくなり、効率的なFOO オブジェクトとフルーツ リストの間の関係を管理する方法。
以上がリストをデータベース列に格納するには、正規化する必要がありますか? それともジャンクション テーブルを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。