ホームページ >データベース >mysql チュートリアル >リストはリレーショナル データベース列に効率的に格納できますか?

リストはリレーショナル データベース列に効率的に格納できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-26 04:50:09569ブラウズ

Can Lists Be Stored Efficiently in a Relational Database Column?

データベース列へのリストの保存: 実行できますか?

リストのような複雑なオブジェクトをデータベース列に保存するタスクに直面したときリレーショナル データベースでは、データベースの正規化原則を順守しながらこれを実現できるかという疑問が生じます。

提供された例では、対象オブジェクト FOO には果物のリストが含まれています。要件は、このリストをデータベース列に保持することです。ただし、従来のリレーショナル データベース スキーマでは、リストのような非構造化データを 1 つの列に格納することは推奨されていません。

リレーショナル データベースのアプローチ

解決策は、ジャンクションと呼ばれる非正規化設計にあります。テーブル。このアプローチでは、FOO オブジェクトとそれに含まれるフルーツの間の関係を保存する別のテーブル FOOFruits を作成します。このテーブルの各行は、特定の 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)
);

このアプローチを使用することで、データの整合性を確保し、不整合を回避します。 FOO テーブルと Fruits テーブルの参照整合性を維持しながら。

たとえば、果物「リンゴ」を FOO オブジェクトに追加します。 ID=5:

INSERT FOOFruits(FooID, FruitID)
SELECT 5, ID FROM Fruits WHERE name = 'Apple';

このメソッドにより、各 FOO オブジェクトに関連付けられた果物リストの効率的なクエリと取得が可能になります。

以上がリストはリレーショナル データベース列に効率的に格納できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。