Slide 11
Slide 11 text
JSONデュアリティ・ビュー
• 生徒毎の、時間割コレクション “student_schedule” を定義
CREATE OR REPLACE JSON DUALITY VIEW FROM student
AS student_schedule
{
name: sname,
student_id: stuid,
schedule: student_courses
{
course: course
{
time,
course: cname,
course_id: cid,
room,
teacher: teacher
{
teacher: tname,
teacher_id: tid
}
}
}
};
JSONのシンプルさとSQLの柔軟性を両立
• JSONは非常に手軽なデータ構造なので、開発者が扱いやすい
• APIを介したアクセスに対応(ANSI JSON拡張
/SODA/MongoDBAPI)
• SQLを介したドキュメントのアクセスも可能
JSONドキュメントの要素を正規化、リレーショナルでストア
• 複数のJSON Collectionに重複する要素を正規化・一元化し、リレー
ショナル・モデルで格納/取出し
• 表に分割したり、整合性をチェックしたり、最適化したりといった面倒なこと
は、すべてデータベースが実施
→ 既存のリレーショナル・データベースの上にJSONのマイクロサービス
を作りたい場合に、非常に便利 (レガシー・モダナイゼーション)
画期的なロックフリー同時実行プロトコル
• RESTのGET、PUTの各APIを使用する場合、ステートレスの呼び出し
にまたがってトランザクションやロックをオープンにしておくことはできない
• ドキュメントの最初の読み込みとその後の書き込みの間に変更があった
場合、書き込み操作は自動的に拒否され、エラーが返される
JSONリレーショナル・デュアリティ
Copyright © 2023 Oracle and/or its affiliates. All rights reserved.
11
{
"student_id" : "S3245",
"name" : "Jill",
"schedule " :
[{
"time" : "14:00",
"course" : "Math 101",
"course_id" : "C123",
"room" : "A102",
"teacher" : "Adam",
"teacher_id": "T543"
},
{
"time" : "16:00",
"course" : "Science 102",
"course_id" : "C345",
"room" : "B405",
"teacher" : "Anita",
"teacher_id": "T789"
}]
}
表
表(外部キー連携)
表(外部キー連携)
Student表の列
アプリからAPIを介した作成/修正/削除に対応
Jillの時間割: 数学と科学
GET
23c