← 基本情報 道場

出題範囲 › 第 9 章

第 9 章 データベース

表で世界を整理する。この章では次の 15 個の知識点を、解説・インタラクティブ教材・練習問題で学びます。

第 9 章 数据库:用表格整理世界

データベースと DBMS・関係データベース

データベースは決まった形で整理されたデータの集まり、それを操作・制御するソフトウェアが DBMS(ミドルウェアの一種)。代表は表形式の 関係データベース(RDB)で、ほかに階層型・ネットワーク型がある。表の 1 行=レコード(行・組・タプル)、1 列=フィールド(列・属性)。

数据库与 DBMS、关系数据库:数据库是按固定形式整理的数据集合,管理它的软件是 DBMS(中间件的一种)。代表是表格形式的关系数据库,另有层次型、网状型。表的一行叫记录(行、元组),一列叫字段(列、属性)。

3層スキーマ

データベースの構造を 外部スキーマ(利用者・アプリから見た見え方)、概念スキーマ(データの論理的な構造)、内部スキーマ(記憶媒体への物理的な格納)の 3 つに分けて定義する(3層スキーマ)。分けておくと、一方を変えても他方に影響しない=データの独立性が高まる。

三级模式:把数据库结构分成外模式(用户看到的样子)、概念模式(逻辑结构)、内模式(物理存储)三层。分开后改一层不影响其他层,提高数据独立性。

主キー・複合キー・外部キー

主キーは行を 1 つに特定できる列。値が重複しない一意制約と、空(NULL)でない非 NULL 制約の両方を満たす。1 列で特定できなければ複数列を組み合わせた複合キーにする。外部キーは他の表の主キーを参照する列で、参照先に存在する値しか入れられない(参照制約)。

主键、复合键、外键:主键能唯一确定一行,需同时满足唯一约束与非空约束;一列不够时用多列组合成复合键。外键引用其他表的主键,只能取被参照表中存在的值(参照约束)。

正規化と関数従属

データベースの正規化は、重複や矛盾が起きないように表を分割すること。第1正規形:繰返し項目をなくし、計算で求まる列を除く。第2正規形:複合キーの一部だけで決まる列(部分関数従属)を別表へ。第3正規形:主キー以外の列で決まる列(推移的関数従属)を別表へ。「A が決まれば B が 1 つに決まる」関係が関数従属(A → B)。

规范化与函数依赖:规范化是为了避免重复和矛盾而拆表。第一范式:消除重复组、删除可计算列;第二范式:把只依赖复合键一部分的列(部分函数依赖)拆出;第三范式:把依赖非主键列的列(传递函数依赖)拆出。A 确定则 B 唯一确定,叫函数依赖 A → B。

トランザクションと ACID 特性

トランザクションは、まとめて扱う一連のデータベース処理(例:振込=A の口座を減らす+B の口座を増やす)。満たすべき性質が ACID特性:原子性(全部やるか全くやらないか)・一貫性(矛盾がない)・隔離性(同時に実行しても互いに影響しない)・耐久性(確定した結果は障害でも消えない)。

事务与 ACID 特性:事务是作为整体处理的一组数据库操作(如转账:A 减、B 加)。需满足 ACID:原子性(全做或全不做)、一致性(无矛盾)、隔离性(并发互不影响)、持久性(提交结果不因故障丢失)。

排他制御・デッドロック・ロックの粒度

同じデータを同時に更新すると、一方の更新が消えることがある(ロストアップデート)。これを防ぐのが排他制御(ロック)。共有ロックは他者の読取りは許すが更新は禁止、専有ロックは読取りも更新も禁止。互いに相手のロック解放を待ち続けるのがデッドロック。ロックの粒度が大きいと管理は簡単だが待ちが増え、小さいと並行性は上がるが管理が大変。

并发控制、死锁、锁粒度:同时更新同一数据可能导致更新丢失,用加锁(并发控制)防止。共享锁允许别人读不允许改;排他锁读写都不允许。互相等待对方释放锁就是死锁。锁粒度大管理简单但等待多,粒度小并发高但管理复杂。

ストアドプロシージャ

ストアドプロシージャは、よく使う SQL の命令群をひとまとめにして、あらかじめ DBMS(サーバ側)に登録しておく仕組み。クライアントは「呼び出す」命令を 1 回送るだけでよいので、ネットワークの負荷が減り、処理速度も上がる。

存储过程:存储过程把常用 SQL 预先登记在 DBMS(服务器)上,客户端只需发一次调用,降低网络负荷、提高处理速度。

障害回復(ジャーナル・ロールバック・ロールフォワード)

データベースはバックアップファイル(定期的なコピー)とジャーナルファイル(更新履歴:更新前と更新後の値)で守る。トランザクション中のエラー → 更新前ジャーナルで開始前に戻す ロールバック(バックワードリカバリ)。ディスク障害 → バックアップ+更新後ジャーナルで障害直前まで戻す ロールフォワード(フォワードリカバリ)。すべて成功したら コミット で確定。

故障恢复(日志、回滚、前滚):用备份(定期拷贝)与日志(更新前、更新后的值)保护数据库。事务中出错 → 用更新前日志回到开始前(回滚);磁盘故障 → 用备份 + 更新后日志恢复到故障前(前滚)。全部成功后提交确定。

分散データベースと 2 相コミット

分散データベースは、複数の場所にあるデータベースを見かけ上 1 つのデータベースとして扱う仕組み。1 つのトランザクションが複数サイトを更新するときは 2相コミット:第 1 相で全サイトに「コミットできるか」を問い合わせ、第 2 相で全員が可能ならコミット、1 つでも不可なら全サイトでロールバックする。

分布式数据库与两阶段提交:分布式数据库把多个地点的数据库看作一个。一个事务更新多个站点时用两阶段提交:第一阶段询问能否提交,第二阶段全部可以则提交,只要有一个不行就全部回滚。

関係演算(選択・射影・結合)

表から新しい表を作る操作が関係演算。選択=条件に合う行を取り出す、射影=指定した列を取り出す、結合=共通の列の値で 2 つの表をつなぐ。こうして一時的に作った仮想の表がビュー。

关系运算(选择、投影、连接):关系运算:选择 = 取出满足条件的行;投影 = 取出指定的列;连接 = 按公共列的值把两个表连起来。由此得到的虚拟表叫视图。

SQL の分類(DDL・DML・DCL)と制約

SQL は 3 種類。DDL(データ定義):CREATE(表・ビューを作る)・DROP(削除)・ALTER(変更)・TRUNCATE(全行を一括削除)。DML(データ操作):SELECT・INSERT・UPDATE・DELETE。DCL(データ制御):GRANT(権限を与える)・REVOKE(取り消す)。CREATE TABLE では PRIMARY KEY・REFERENCES(外部キー)・UNIQUE・CHECK・NOT NULL の制約を付けられる。

SQL 分类与约束:SQL 分三类:DDL(定义:CREATE、DROP、ALTER、TRUNCATE)、DML(操作:SELECT、INSERT、UPDATE、DELETE)、DCL(控制:GRANT、REVOKE)。建表时可以加主键、外键、唯一、检查、非空等约束。

DML の基本構文(SELECT・UPDATE・DELETE・INSERT)

SELECT 列 FROM 表 WHERE 条件(取り出す)、UPDATE 表 SET 列 = 値 WHERE 条件(更新)、DELETE FROM 表 WHERE 条件(削除)、INSERT INTO 表 (列, …) VALUES (値, …)(追加)。WHERE を省略すると全行が対象になる。

DML 基本语法:SELECT 取出、UPDATE 更新、DELETE 删除、INSERT 插入。省略 WHERE 时作用于全部行。

SELECT 文(条件・結合・並べ替え)

WHERE では比較演算子(= <> < <= > >=)と論理演算子(AND・OR・NOT)で条件を書く。SELECT * は全列。FROM 表1, 表2 WHERE 表1.列 = 表2.列 で表を結合(同じ名前の列は「表名.列名」で区別)。ORDER BY 列 [ASC|DESC] で並べ替え(ASC=昇順は省略可、DESC=降順)。

SELECT 语句(条件、连接、排序):WHERE 用比较运算符和 AND/OR/NOT 写条件;SELECT * 取全部列;多表 FROM + 相等条件实现连接(同名列用「表名.列名」区分);ORDER BY 排序,ASC 升序可省略,DESC 降序。

GROUP BY・集合関数・HAVING

GROUP BY 列 で同じ値の行をグループにまとめ、集合関数(SUM 合計・AVG 平均・COUNT 件数・MAX 最大・MIN 最小)でグループごとに集計する。WHERE は行を、HAVING はグループを選ぶ。実行順序は FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。

GROUP BY、聚合函数、HAVING:GROUP BY 把相同值的行分组,用聚合函数按组统计。WHERE 选行,HAVING 选组。执行顺序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。

新シラバス用語(列指向データベース・グラフデータベース)

関係データベース以外のデータベースをまとめて NoSQL と呼ぶ。列指向データベース:通常は行単位で扱うデータを列単位でまとめて格納する。特定の列の集計・分析が速い。グラフデータベース:データをノード(点)とエッジ(線)のグラフ形式で保存し、SNS の友人関係のような「つながり」をたどる検索が得意。

新大纲术语(列式数据库、图数据库):关系数据库以外的统称 NoSQL。列式数据库按列存储,适合对特定列做统计分析;图数据库用节点和边存储,擅长沿着关系(如社交好友)检索。

基本情報 道場で学習を始める →

← 第 8 章 AI・データ活用 第 10 章 情報セキュリティ →