Aritalab:Lecture/Database/Object

From Metabolomics.JP
Jump to: navigation, search

Contents

オブジェクトデータベース

オブジェクト指向を用いる理由に以下の要求があります。とりわけ生物学で用いる大量データには、ユーザー定義型や参照の利用が必須です。

  • データ型をユーザーが自由に定義したい
  • 継承を使いたい
  • データへの参照(ポインタなど)を使いたい

SQLに即した記述

オブジェクト型の関係データベースではSQL構文の中で以下のような記述ができるようになっています。

CREATE TYPE protein_type AS
  ROW (id INTEGER, name TEXT, seq TEXT, length INTEGER, comment TEXT, reference TEXT ARRAY[10])
  REF IS SYSTEM GENERATED;

CREATE TABLE YeastProtein OF protein_type
  REF IS yid SYSTEM GENERATED;

CREATE FUNCTION codon_usage(protein_type) RETURNS TEXT
  AS EXTERNAL NAME 'c:/../codonUsage.class' LANGUAGE 'java';

CREATE TABLE Expressed
  (id INTEGER, assay TEXT, protein REF(protein_type) SCOPE YeastProtein, amount INTEGER)

配列やリスト

配列やリストは、collection 型と呼ばれます。SQL:1999では

  • ROW (n1 t1, n2 t2, ..., nn tn)
  • base ARRAY[i]

という形が導入されています。ただしARRAY[i]は入れ子にできません。 こうした型を用いて以下のような問い合わせを記述できます。

SELECT DISTINCT E.assay, E.protein
FROM Expressed E
WHERE CARDINALITY(E.protein->reference) > 5

参照型

参照型を導入することは簡単なように思えますが、様々なコストを伴います。

オブジェクト ID

データベース上のオブジェクトには object id が与えられます。ユーザはこの値を利用可能ですが、オブジェクトの生成、消滅をきちんと認識して使わないと参照エラーを起こします。

深い等価性と、浅い等価性

オブジェクトを比較する際に、参照先まで全て等しいかどうかという区別が必要になります。

データの削除や更新

実体が削除されたのにもかかわらず、参照のみが残されるとデータの整合性が失われます。参照型の中身は実体が削除されたら null に戻さねばなりません。

Personal tools
Namespaces

Variants
Actions
Navigation
metabolites
Toolbox