ホームページ > データベース > mysql チュートリアル > リストをデータベース列に格納するには、正規化する必要がありますか? それともジャンクション テーブルを使用する必要がありますか?

リストをデータベース列に格納するには、正規化する必要がありますか? それともジャンクション テーブルを使用する必要がありますか?

Linda Hamilton
リリース: 2024-12-26 15:03:10
オリジナル
888 人が閲覧しました

Should I Normalize or Use a Junction Table to Store a List in a Database Column?

データベース列へのリストの保存: 正規化とジャンクション テーブル

データベース内にオブジェクトのリストを保存する必要がある場合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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート