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

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

Mary-Kate Olsen
リリース: 2024-12-26 04:50:09
オリジナル
558 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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