<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://metabolomics.jp/mediawiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://metabolomics.jp/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Aritalab%3ALecture%2FDatabase%2FObject</id>
		<title>Aritalab:Lecture/Database/Object - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://metabolomics.jp/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Aritalab%3ALecture%2FDatabase%2FObject"/>
		<link rel="alternate" type="text/html" href="http://metabolomics.jp/mediawiki/index.php?title=Aritalab:Lecture/Database/Object&amp;action=history"/>
		<updated>2026-06-16T20:25:55Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>http://metabolomics.jp/mediawiki/index.php?title=Aritalab:Lecture/Database/Object&amp;diff=254826&amp;oldid=prev</id>
		<title>Adm: Created page with &quot;==オブジェクトデータベース== オブジェクト指向を用いる理由に以下の要求があります。とりわけ生物学で用いる大量データには、...&quot;</title>
		<link rel="alternate" type="text/html" href="http://metabolomics.jp/mediawiki/index.php?title=Aritalab:Lecture/Database/Object&amp;diff=254826&amp;oldid=prev"/>
				<updated>2011-09-16T03:34:54Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;==オブジェクトデータベース== オブジェクト指向を用いる理由に以下の要求があります。とりわけ生物学で用いる大量データには、...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==オブジェクトデータベース==&lt;br /&gt;
オブジェクト指向を用いる理由に以下の要求があります。とりわけ生物学で用いる大量データには、ユーザー定義型や参照の利用が必須です。&lt;br /&gt;
* データ型をユーザーが自由に定義したい&lt;br /&gt;
* 継承を使いたい&lt;br /&gt;
* データへの参照（ポインタなど）を使いたい&lt;br /&gt;
&lt;br /&gt;
===SQLに即した記述===&lt;br /&gt;
オブジェクト型の関係データベースではSQL構文の中で以下のような記述ができるようになっています。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TYPE protein_type AS&lt;br /&gt;
  ROW (id INTEGER, name TEXT, seq TEXT, length INTEGER, comment TEXT, reference TEXT ARRAY[10])&lt;br /&gt;
  REF IS SYSTEM GENERATED;&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE YeastProtein OF protein_type&lt;br /&gt;
  REF IS yid SYSTEM GENERATED;&lt;br /&gt;
&lt;br /&gt;
CREATE FUNCTION codon_usage(protein_type) RETURNS TEXT&lt;br /&gt;
  AS EXTERNAL NAME 'c:/../codonUsage.class' LANGUAGE 'java';&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE Expressed&lt;br /&gt;
  (id INTEGER, assay TEXT, protein REF(protein_type) SCOPE YeastProtein, amount INTEGER)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===配列やリスト===&lt;br /&gt;
配列やリストは、collection 型と呼ばれます。SQL:1999では&lt;br /&gt;
* ROW (n&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; t&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, n&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; t&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, ..., n&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; t&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;)&lt;br /&gt;
* base ARRAY[i]&lt;br /&gt;
という形が導入されています。ただしARRAY[i]は入れ子にできません。&lt;br /&gt;
こうした型を用いて以下のような問い合わせを記述できます。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT DISTINCT E.assay, E.protein&lt;br /&gt;
FROM Expressed E&lt;br /&gt;
WHERE CARDINALITY(E.protein-&amp;gt;reference) &amp;gt; 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===参照型===&lt;br /&gt;
参照型を導入することは簡単なように思えますが、様々なコストを伴います。&lt;br /&gt;
;オブジェクト ID&lt;br /&gt;
データベース上のオブジェクトには object id が与えられます。ユーザはこの値を利用可能ですが、オブジェクトの生成、消滅をきちんと認識して使わないと参照エラーを起こします。&lt;br /&gt;
&lt;br /&gt;
;深い等価性と、浅い等価性&lt;br /&gt;
オブジェクトを比較する際に、参照先まで全て等しいかどうかという区別が必要になります。&lt;br /&gt;
&lt;br /&gt;
;データの削除や更新&lt;br /&gt;
実体が削除されたのにもかかわらず、参照のみが残されるとデータの整合性が失われます。参照型の中身は実体が削除されたら null に戻さねばなりません。&lt;/div&gt;</summary>
		<author><name>Adm</name></author>	</entry>

	</feed>