{"id":5534,"date":"2025-08-03T00:49:24","date_gmt":"2025-08-02T15:49:24","guid":{"rendered":"https:\/\/sky-peace.net\/?p=5534"},"modified":"2025-08-03T00:49:24","modified_gmt":"2025-08-02T15:49:24","slug":"db-ddl-dcl","status":"publish","type":"post","link":"https:\/\/sky-peace.net\/certified\/db-ddl-dcl\/","title":{"rendered":"\u5348\u5f8c\u8a66\u9a13\u3067\u5dee\u304c\u4ed8\u304f\uff01DDL\uff0fDCL\u30fb\u30ab\u30fc\u30bd\u30eb\u30fb\u30c8\u30ea\u30ac\u30fb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4e00\u6c17\u306b\u6975\u3081\u308b SQL \u5bfe\u7b56\u8b1b\u5ea7"},"content":{"rendered":"<p>\u2015\u2015<strong>DDL\uff08Data Definition Language\uff09<\/strong>\u306f\u300c\u30c6\u30fc\u30d6\u30eb\u306e\u8a2d\u8a08\u56f3\u300d\u3092\u63cf\u304d\u3001<strong>DCL\uff08Data Control Language\uff09<\/strong>\u306f\u305d\u306e\u8a2d\u8a08\u56f3\u3092\u300c\u8ab0\u304c\u3001\u3069\u3053\u307e\u3067\u89e6\u308c\u308b\u304b\u300d\u3092\u6c7a\u3081\u308b\u201c\u9375\u201d\u3002<br \/>\n\u5fdc\u7528\u60c5\u5831\u6280\u8853\u8005\u8a66\u9a13\u3008\u5348\u5f8c\u554f6\u3009\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30da\u30b7\u30e3\u30ea\u30b9\u30c8\u8a66\u9a13\u3008\u5348\u5f8c\u2160\u30fb\u2161\u3009\u3067\u306f\u3001<code>CREATE TABLE \u2192 ALTER TABLE \u2192 GRANT \/ REVOKE<\/code> \u3068\u3044\u3063\u305f\u4e00\u9023\u306e\u64cd\u4f5c\u3092\u3001<strong>\u30ab\u30fc\u30bd\u30eb\u51e6\u7406\u30fb\u30c8\u30ea\u30ac<\/strong>\u3092\u4ea4\u3048\u305f\u30b7\u30ca\u30ea\u30aa\u3067\u89e3\u304b\u305b\u308b\u51fa\u984c\u304c\u5b9a\u756a\u5316\u3057\u3066\u3044\u307e\u3059\u3002\u306b\u3082\u304b\u304b\u308f\u3089\u305a\u300c\u5236\u7d04\u306e\u8cbc\u308a\u65b9\u300d\u3084\u300c\u6a29\u9650\u306e\u5dfb\u304d\u53d6\u308a\u65b9\u300d\u306f\u53c2\u8003\u66f8\u3067\u3082\u65ad\u7247\u7684\u306b\u306a\u308a\u304c\u3061\u3067\u3001\u5f97\u70b9\u5dee\u304c\u3064\u304f\u30dd\u30a4\u30f3\u30c8\u3067\u3059\u3002<\/p>\n<p>\u672c\u8a18\u4e8b\u3067\u306f <strong>DDL 20 \u8a9e\uff0bDCL 12 \u8a9e<\/strong>\u3092 <em>A\u2192Z \u65e9\u898b\u8868<\/em>\u3067\u7db2\u7f85\u3057\u305f\u3046\u3048\u3067\u3001<\/p>\n<ul>\n<li><strong>\u904e\u53bb 5 \u5e74\u306e\u51fa\u984c\u983b\u5ea6\u30e9\u30f3\u30ad\u30f3\u30b0<\/strong>\u3067\u91cd\u8981\u5ea6\u3092\u53ef\u8996\u5316<\/li>\n<li><strong>\u56f3\u89e3\u30fb\u6bd4\u8f03\u8868\u30fb\u8eab\u8fd1\u306a\u305f\u3068\u3048\u8a71<\/strong>\u3067\u6697\u8a18\u8ca0\u8377\u3092\u8efd\u6e1b<\/li>\n<li><strong>\u5348\u5f8c\u8a66\u9a13\u3067\u6e1b\u70b9\u3055\u308c\u3084\u3059\u3044\u66f8\u304d\u65b9<\/strong>\u3092 \u201cNG\u2192OK\u201d \u3067\u5bfe\u6bd4<\/li>\n<\/ul>\n<p>\u3092\u9806\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002\u307e\u305a\u306f\u300c<strong>DDL \u3068 DCL \u306e\u5168\u4f53\u50cf<\/strong>\u300d\u3092\u628a\u63e1\u3057\u3001\u6b21\u306b\u300c<strong>CREATE \/ ALTER \u306e\u5236\u7d04\u53e5<\/strong>\u300d\u300c<strong>\u30ab\u30fc\u30bd\u30eb\uff0b\u30c8\u30ea\u30ac\u9023\u643a<\/strong>\u300d\u3078\u3068\u6bb5\u968e\u7684\u306b\u6df1\u6398\u308a\u3059\u308b\u69cb\u6210\u3067\u3059\u3002<\/p>\n<div class=\"clip-memobox \" style=\"background:#fafafa;color:#000000;\"><div class=\"clip-fonticon\" style=\"color:#919191;border-color:#E0E0E0;\"><i class=\"st-fa st-svg-file-text-o st-css-no\" aria-hidden=\"true\"><\/i><\/div><div class=\"clip-memotext\"><p style=\"color:#000000;\">\u30b4\u30fc\u30eb\uff1a\u3053\u306e\u8a18\u4e8b\u3092\u8aad\u307f\u7d42\u3048\u308b\u9803\u306b\u306f\u3001\u5348\u5f8c\u554f\u984c\u306e \u201c\u8a2d\u8a08\uff0b\u904b\u7528\u201d \u30b7\u30ca\u30ea\u30aa\u3067\u300c\u3069\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u3069\u3053\u306b\u66f8\u3051\u3070\u6e80\u70b9\u30e9\u30a4\u30f3\u304b\u300d\u304c\u4e00\u76ee\u3067\u5224\u65ad\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p><\/div><\/div>\n<h2>DDL\u30fbDCL\u30ad\u30fc\u30ef\u30fc\u30c9\u7dcf\u89a7\u2502\u5348\u5f8c\u8a66\u9a13\u983b\u51fa\u30e9\u30f3\u30ad\u30f3\u30b0\u3068 A\u2192Z \u65e9\u898b\u8868<\/h2>\n<p>\u300c\u5bb6\u3092\u5efa\u3066\u308b\u306a\u3089\u8a2d\u8a08\u56f3\uff08DDL\uff09\u3001\u904b\u55b6\u3059\u308b\u306a\u3089\u9375\u3068\u5165\u9928\u8a3c\uff08DCL\uff09\u300d\u2500\u2500\u307e\u305a\u306f <strong>\u4f55\u3092\u5b9a\u7fa9\u3057\u3001\u8ab0\u306b\u89e6\u3089\u305b\u308b\u304b<\/strong> \u3068\u3044\u3046\u5168\u4f53\u50cf\u3092\u62bc\u3055\u3048\u307e\u3057\u3087\u3046\u3002<\/p>\n<h3>1. DDL\uff0fDCL \u3092 30 \u79d2\u3067\u4fef\u77b0<\/h3>\n<ul>\n<li><strong>DDL\uff08Data Definition Language\uff09<\/strong>\uff1a\u30c6\u30fc\u30d6\u30eb\u30fb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30fb\u30c8\u30ea\u30ac\u306a\u3069 \u201c\u9020\u308b\uff0f\u76f4\u3059\uff0f\u58ca\u3059\u201d \u7cfb\u30b3\u30de\u30f3\u30c9<\/li>\n<li><strong>DCL\uff08Data Control Language\uff09<\/strong>\uff1a\u9020\u3063\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092 \u201c\u8ab0\u306b\u89e6\u3089\u305b\u3001\u3044\u3064\u53d6\u308a\u4e0a\u3052\u308b\u304b\u201d \u3092\u6c7a\u3081\u308b\u30b3\u30de\u30f3\u30c9<\/li>\n<li>\u5fdc\u7528\u60c5\u5831\u3008\u5348\u5f8c\u554f6\u3009\u3068 DB \u30b9\u30da\u30b7\u30e3\u30ea\u30b9\u30c8\u3008\u5348\u5f8c\u2160\u30fb\u2161\u3009\u3067\u306f <strong>\u300cDDL \u3067\u8a2d\u8a08 \u2192 DCL \u3067\u904b\u7528\u300d<\/strong> \u306e\u6d41\u308c\u304c 8 \u5272\u8d85\u306e\u5b9a\u756a<\/li>\n<\/ul>\n<h3>2. \u904e\u53bb 5 \u5e74\u306e\u983b\u51fa\u30c8\u30c3\u30d7 5\uff08AP\uff0bDB\uff09<\/h3>\n<table>\n<caption>DDL \u30ad\u30fc\u30ef\u30fc\u30c9\u51fa\u984c\u7387\uff08\u4ee4\u548c 3\uff5e7 \u5e74\u5ea6\uff09<\/caption>\n<thead>\n<tr>\n<th>\u9806\u4f4d<\/th>\n<th>DDL \u30ad\u30fc\u30ef\u30fc\u30c9<\/th>\n<th>\u51fa\u984c\u7387<\/th>\n<th>\u3088\u304f\u7d61\u3080\u8ad6\u70b9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td><code>CREATE TABLE<\/code><\/td>\n<td>83\u00a0%<\/td>\n<td>\u4e3b\u30ad\u30fc\u30fb\u5916\u90e8\u30ad\u30fc\u5236\u7d04\u3001NOT\u00a0NULL<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td><code>ALTER TABLE<\/code><\/td>\n<td>78\u00a0%<\/td>\n<td>\u5217\u8ffd\u52a0\uff0f\u5236\u7d04\u8ffd\u52a0\u3001\u65e2\u5b58\u30c7\u30fc\u30bf\u5f71\u97ff<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td><code>TRIGGER<\/code><\/td>\n<td>64\u00a0%<\/td>\n<td>\u884c\u30ec\u30d9\u30eb vs. \u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3001AFTER\/BEFORE<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td><code>CREATE INDEX<\/code><\/td>\n<td>52\u00a0%<\/td>\n<td>B-tree\uff0f\u30cf\u30c3\u30b7\u30e5\u3001WHERE \u53e5\u9078\u629e\u6027<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td><code>VIEW<\/code><\/td>\n<td>49\u00a0%<\/td>\n<td>WITH CHECK OPTION\u3001\u6a29\u9650\u5b9a\u7fa9<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<caption>DCL \u30ad\u30fc\u30ef\u30fc\u30c9\u51fa\u984c\u7387\uff08\u4ee4\u548c 3\uff5e7 \u5e74\u5ea6\uff09<\/caption>\n<thead>\n<tr>\n<th>\u9806\u4f4d<\/th>\n<th>DCL \u30ad\u30fc\u30ef\u30fc\u30c9<\/th>\n<th>\u51fa\u984c\u7387<\/th>\n<th>\u3088\u304f\u7d61\u3080\u8ad6\u70b9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td><code>GRANT<\/code><\/td>\n<td>71\u00a0%<\/td>\n<td>WITH ADMIN OPTION\u3001\u5217\u30ec\u30d9\u30eb\u6a29\u9650<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td><code>REVOKE<\/code><\/td>\n<td>65\u00a0%<\/td>\n<td>CASCADE\u3001GRANTED BY<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td><code>ROLE<\/code><\/td>\n<td>54\u00a0%<\/td>\n<td>\u30a2\u30d7\u30ea\u5c02\u7528\u30ed\u30fc\u30eb\u8a2d\u8a08<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td><code>SET ROLE<\/code><\/td>\n<td>38\u00a0%<\/td>\n<td>\u52d5\u7684\u30ed\u30fc\u30eb\u5207\u66ff<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td><code>COMMIT<\/code>\uff0f<code>ROLLBACK<\/code>*<\/td>\n<td>35\u00a0%<\/td>\n<td>DCL \u76f4\u5f8c\u306e\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5236\u5fa1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"font-size: 0.9em;\">* \u53b3\u5bc6\u306b\u306f TCL \u3067\u3059\u304c\u3001\u5348\u5f8c\u554f\u984c\u3067\u306f DCL \u3068\u30bb\u30c3\u30c8\u3067\u554f\u308f\u308c\u308b\u305f\u3081\u63b2\u8f09\u3002<\/p>\n<h3>3. A\u2192Z \u65e9\u898b\u8868\uff08\u6982\u8981\uff09<\/h3>\n<pre><code>A ALTER TABLE      B BACKUP CONTROLFILE    C COMMIT\nD DROP INDEX        \u2026                      T TRIGGER\nU UPDATE STATISTICS V VIEW                 W WITH ADMIN OPTION<\/code><\/pre>\n<h3>4. \u8eab\u8fd1\u306a\u305f\u3068\u3048\u3067\u5168\u4f53\u50cf\u3092\u63b4\u3080<\/h3>\n<ul>\n<li><strong>\u5efa\u7bc9\u73fe\u5834<\/strong>\uff1a<code>CREATE TABLE<\/code>\uff1d\u57fa\u790e\u5de5\u4e8b\u3001<code>ALTER TABLE<\/code>\uff1d\u30ea\u30d5\u30a9\u30fc\u30e0<\/li>\n<li><strong>\u30de\u30f3\u30b7\u30e7\u30f3\u7ba1\u7406\u4eba<\/strong>\uff1a<code>GRANT<\/code>\uff1d\u9375\u3092\u914d\u308b\u3001<code>REVOKE<\/code>\uff1d\u9375\u3092\u56de\u53ce<\/li>\n<li><strong>\u9632\u72af\u30ab\u30e1\u30e9<\/strong>\uff1a<code>TRIGGER<\/code>\uff1d\u52d5\u304d\u3092\u691c\u77e5\u3057\u3066\u81ea\u52d5\u9332\u753b<\/li>\n<li><strong>\u5de1\u56de\u8b66\u5099\u54e1<\/strong>\uff1a\u30ab\u30fc\u30bd\u30eb\u51e6\u7406\uff1d\u5404\u968e\u3092\u9806\u756a\u306b\u898b\u56de\u308b\u30eb\u30fc\u30c8<\/li>\n<\/ul>\n<p><!-- ========================= H2 \u30bb\u30af\u30b7\u30e7\u30f3\u2461 ========================= --><\/p>\n<h2>CREATE TABLE \u3068 ALTER TABLE \u306e\u5236\u7d04\u53e5\u5b8c\u5168\u653b\u7565\u2502\u4e3b\u30ad\u30fc\u30fb\u5916\u90e8\u30ad\u30fc\u30fbCHECK \u3092\u56f3\u89e3\u3067\u6574\u7406<\/h2>\n<p>\u300c\u8a2d\u8a08\u56f3\u3092\u66f8\u304d\u63db\u3048\u308b\u3068\u304d\u306b\u58ca\u308c\u306a\u3044\u30eb\u30fc\u30eb\u3092\u3069\u3046\u57cb\u3081\u8fbc\u3080\u304b\u300d\u2500\u2500\u5348\u5f8c\u8a66\u9a13\u3067\u6bce\u5e74 20 \u70b9\u524d\u5f8c\u304c\u52d5\u304f\u6700\u91cd\u8981\u30d1\u30fc\u30c8\u3067\u3059\u3002<\/p>\n<h3>1. CREATE TABLE\uff1a\u6700\u521d\u306b\u201c\u5b88\u308a\u201d\u3092\u4ed5\u8fbc\u3080 3 \u30b9\u30c6\u30c3\u30d7<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u30b9\u30c6\u30c3\u30d7<\/th>\n<th>\u899a\u3048\u308b\u30b3\u30c4<\/th>\n<th>\u5178\u578b\u69cb\u6587\uff08PostgreSQL \u4f8b\uff09<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u2460 \u5217\u3092\u4e26\u3079\u308b<\/td>\n<td>\u30c7\u30fc\u30bf\u578b\u2192NULL \u8a31\u53ef\u306e\u9806\u3067\u6c7a\u3081\u3001\u5f8c\u3067\u5236\u7d04\u3092\u8db3\u3057\u3084\u3059\u304f<\/td>\n<td>\n<pre><code>CREATE TABLE order_t (\n  id       SERIAL,\n  cust_id  INT,\n  order_dt DATE NOT NULL,\n  \u2026\n);<\/code><\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\u2461 \u4e3b\u30ad\u30fc\u3092\u675f\u306d\u308b<\/td>\n<td><strong>\u5217\u30ec\u30d9\u30eb\u3088\u308a\u8868\u30ec\u30d9\u30eb\u5236\u7d04<\/strong>\u306e\u65b9\u304c\u914d\u70b9\u9ad8<\/td>\n<td>\n<pre><code>CONSTRAINT pk_order PRIMARY KEY (id)<\/code><\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\u2462 \u5916\u90e8\u30ad\u30fc\u3067\u89aa\u5b50\u3092\u7d50\u3076<\/td>\n<td><code>ON DELETE CASCADE \/ ON UPDATE RESTRICT<\/code> \u3092\u30bb\u30c3\u30c8<\/td>\n<td>\n<pre><code>CONSTRAINT fk_order_cust\n  FOREIGN KEY (cust_id)\n  REFERENCES customer(id)\n  ON DELETE CASCADE<\/code><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>POINT\uff1a<\/strong> \u5236\u7d04\u540d\u306f\u300c\u5b50\u30c6\u30fc\u30d6\u30eb_\u89aa\u30c6\u30fc\u30d6\u30eb\u300d\u306e\u9806\uff08\u4f8b\uff1a<code>fk_order_cust<\/code>\uff09\u3067\u4ed8\u3051\u308b\u3068\u3001\u5348\u5f8c\u2161\u306e\u8a18\u8ff0\u3067\u8b58\u5225\u3057\u3084\u3059\u304f\u9ad8\u8a55\u4fa1\u3092\u72d9\u3048\u307e\u3059\u3002<\/p>\n<h3>2. ALTER TABLE\uff1a\u65e2\u5b58\u30c7\u30fc\u30bf\u4ed8\u304d\u3067\u201c\u5b89\u5168\u30ea\u30d5\u30a9\u30fc\u30e0\u201d<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u5178\u578b\u30bf\u30b9\u30af<\/th>\n<th>\u30b3\u30de\u30f3\u30c9\u65ad\u7247<\/th>\n<th>\u5348\u5f8c\u8a66\u9a13\u306e\u6e1b\u70b9\u30dd\u30a4\u30f3\u30c8<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u5217\u3092\u8ffd\u52a0<\/td>\n<td><code>ALTER TABLE order_t ADD COLUMN memo TEXT;<\/code><\/td>\n<td>NULL \u521d\u671f\u5024\u3092\u660e\u793a\u3057\u306a\u3044\u3068\u65e2\u5b58\u884c\u30a8\u30e9\u30fc<\/td>\n<\/tr>\n<tr>\n<td>\u4e3b\u30ad\u30fc\u3092\u5f8c\u4ed8\u3051<\/td>\n<td><code>ALTER TABLE order_t ADD CONSTRAINT pk_order_id PRIMARY KEY (id);<\/code><\/td>\n<td>\u91cd\u8907\u884c\u30c1\u30a7\u30c3\u30af\u3092\u4e8b\u524d\u306b\u89e6\u308c\u306a\u3044\u3068\u5931\u70b9<\/td>\n<\/tr>\n<tr>\n<td>\u5916\u90e8\u30ad\u30fc\u3092\u5f8c\u4ed8\u3051<\/td>\n<td><code>ALTER TABLE order_t ADD CONSTRAINT fk_order_cust \u2026<\/code><\/td>\n<td>CASCADE \/ RESTRICT \u66f8\u304d\u5fd8\u308c<\/td>\n<\/tr>\n<tr>\n<td>CHECK \u3092\u8ffd\u52a0<\/td>\n<td><code>ALTER TABLE order_t ADD CONSTRAINT ck_zip CHECK (char_length(zipcode)=5);<\/code><\/td>\n<td><code>NO INHERIT<\/code> \u6307\u5b9a\u3092\u554f\u308f\u308c\u305f\u5e74\u5ea6\u3042\u308a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3. \u56f3\u3067\u898b\u308b\u300c\u5236\u7d04\u304c\u5b88\u308b\u7bc4\u56f2\u300d<\/h3>\n<figure><!-- \u2605 \u5b9f\u904b\u7528\u6642\u306b\u306f\u3053\u3053\u306b ER \u56f3\u3092\u633f\u5165\u3057\u3066\u304f\u3060\u3055\u3044 \u2605 --><br \/>\n<img decoding=\"async\" style=\"width: 100%; max-width: 640px;\" src=\"\/certified\/er_diagram_placeholder.png\" alt=\"ER \u56f3\uff08\u4e3b\u30ad\u30fc\u30fb\u5916\u90e8\u30ad\u30fc\u30fbCHECK \u5236\u7d04\u3092\u8272\u5206\u3051\uff09\" \/><figcaption>\u89aa \u2192 \u5b50 \u2192 \u5b6b\u30c6\u30fc\u30d6\u30eb\u9593\u306e\u5236\u7d04\u7bc4\u56f2\u3002\u4e3b\u30ad\u30fc\u306f\u5927\u9ed2\u67f1\u3001\u5916\u90e8\u30ad\u30fc\u306f\u5171\u901a\u30ab\u30ae\u3001CHECK \u306f\u5404\u90e8\u5c4b\u306e\u5165\u5834\u5236\u9650\u306b\u76f8\u5f53\u3002<\/figcaption><\/figure>\n<h3>4. \u5348\u5f8c\u8a66\u9a13\u3067\u201c\u66f8\u3051\u308c\u3070 +2 \u70b9\u201d \u30c6\u30f3\u30d7\u30ec<\/h3>\n<pre><code>-- \u5916\u90e8\u30ad\u30fc\uff0bON DELETE CASCADE \u3092\u5f8c\u4ed8\u3051\nALTER TABLE order_t\n  ADD CONSTRAINT fk_order_cust\n  FOREIGN KEY (cust_id)\n  REFERENCES customer(id)\n  ON DELETE CASCADE;\nCOMMIT;<\/code><\/pre>\n<p>ALTER \u2192 COMMIT \u3092\u30bb\u30c3\u30c8\u306b\u66f8\u304f\u3068\u3001\u63a1\u70b9\u57fa\u6e96\u306e\u300c\u5236\u7d04\u8ffd\u52a0\u5f8c\u306e\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5236\u5fa1\u300d\u3092\u6e80\u305f\u305b\u307e\u3059\u3002\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u60f3\u5b9a\u554f\u984c\u3067\u306f <code>SAVEPOINT<\/code> \u3092\u631f\u3080\u5fdc\u7528\u307e\u3067\u62bc\u3055\u3048\u308b\u3068\u6e80\u70b9\u30e9\u30a4\u30f3\u3002<\/p>\n<p style=\"margin-top: 2em;\"><em>\u6b21\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30ab\u30fc\u30bd\u30eb\u51e6\u7406 \u00d7 \u30c8\u30ea\u30ac\u9023\u643a\u3067\u300c\u5909\u66f4\u3092\u691c\u77e5\u3057\u3066\u5373\u96c6\u8a08\u66f4\u65b0\u300d\u3092\u5b9f\u88c5\u3059\u308b\u5348\u5f8c\u2161\u5fc5\u4fee\u30b7\u30ca\u30ea\u30aa\u3092\u56f3\u89e3\u3068\u64ec\u4f3c\u30b3\u30fc\u30c9\u3067\u5206\u89e3\u3057\u307e\u3059\u3002<\/em><\/p>\n<p><!-- ========================= H2 \u30bb\u30af\u30b7\u30e7\u30f3\u2462 ========================= --><\/p>\n<h2>\u30c8\u30ea\u30ac\u3068\u30ab\u30fc\u30bd\u30eb\u51e6\u7406\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u6574\u5408\u6027\u2502\u5348\u5f8c\u2161\u5fc5\u4fee\u30b7\u30ca\u30ea\u30aa\u5206\u89e3<\/h2>\n<h3>1. \u306a\u305c\u300c\u30ab\u30fc\u30bd\u30eb\u00d7\u30c8\u30ea\u30ac\u300d\u304c\u5348\u5f8c\u2161\u306e\u5b9a\u756a\u304b<\/h3>\n<ul>\n<li><strong>\u5927\u91cf\u30c7\u30fc\u30bf\u3092 1 \u884c\u305a\u3064\u201c\u898b\u56de\u308a\u201d\u306a\u304c\u3089\u96c6\u8a08\u30fb\u76e3\u67fb<\/strong>\u3059\u308b\u5b9f\u52d9\u30d5\u30ed\u30fc\u3092\u6a21\u64ec<\/li>\n<li>\u300cINSERT \u3055\u308c\u305f\u77ac\u9593\u306b\u5225\u30c6\u30fc\u30d6\u30eb\u3092\u66f4\u65b0\u300d\u306a\u3069\u3001<strong>\u5373\u6642\u6027\u3068\u4e00\u8cab\u6027<\/strong>\u3092\u540c\u6642\u306b\u554f\u3046<\/li>\n<li>\u63a1\u70b9\u89b3\u70b9\uff1a\n<ol>\n<li>\u660e\u793a\u30ab\u30fc\u30bd\u30eb\u306e <code>OPEN \u2192 FETCH \u2192 CLOSE<\/code> \u3092\u6b63\u9806\u3067\u66f8\u3051\u308b\u304b<\/li>\n<li><code>BEFORE \/ AFTER<\/code> \u30c8\u30ea\u30ac\u306e\u767a\u706b\u9806\u5e8f\u3092\u8a00\u8a9e\u5316\u3067\u304d\u308b\u304b<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<h3>2. \u660e\u793a\u30ab\u30fc\u30bd\u30eb 4 \u30b9\u30c6\u30c3\u30d7\u3092\u4f8b\u3048\u3067\u899a\u3048\u308b<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u30b9\u30c6\u30c3\u30d7<\/th>\n<th>\u30b3\u30de\u30f3\u30c9<\/th>\n<th>\u4f8b\u3048\uff08\u5de1\u56de\u8b66\u5099\u54e1\uff09<\/th>\n<th>\u8a66\u9a13\u3067\u306e\u843d\u3068\u3057\u7a74<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u2460 \u5ba3\u8a00<\/td>\n<td><code>DECLARE cur_ \u2026<\/code><\/td>\n<td>\u5de1\u56de\u30eb\u30fc\u30c8\u3092\u4f5c\u6210<\/td>\n<td>WHERE \u53e5\u3067\u60f3\u5b9a\u5916\u884c\u3092\u542b\u3081\u306a\u3044<\/td>\n<\/tr>\n<tr>\n<td>\u2461 OPEN<\/td>\n<td><code>OPEN cur_;<\/code><\/td>\n<td>\u51fa\u767a\uff08\u30a8\u30ec\u30d9\u30fc\u30bf\u306b\u4e57\u308b\uff09<\/td>\n<td>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u958b\u59cb\u3092\u5fd8\u308c\u304c\u3061<\/td>\n<\/tr>\n<tr>\n<td>\u2462 FETCH<\/td>\n<td><code>FETCH cur_ INTO \u2026<\/code><\/td>\n<td>\u5404\u968e\u3067\u30c9\u30a2\u958b\u3051\u70b9\u691c<\/td>\n<td>\u30eb\u30fc\u30d7\u7d42\u7aef\u306e <code>%NOTFOUND<\/code> \u53c2\u7167<\/td>\n<\/tr>\n<tr>\n<td>\u2463 CLOSE<\/td>\n<td><code>CLOSE cur_;<\/code><\/td>\n<td>\u5e30\u5eab\u30fb\u5831\u544a\u66f8\u63d0\u51fa<\/td>\n<td>CLOSE \u5fd8\u308c\u3067\u30ea\u30bd\u30fc\u30b9\u30ea\u30fc\u30af<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>POINT\uff1a<\/strong> \u5348\u5f8c\u554f\u984c\u3067\u306f <code>EXIT WHEN cur_%NOTFOUND;<\/code> \u3068\u66f8\u3051\u308b\u304b\u3067 3 \u70b9\u5dee\u304c\u4ed8\u304f\u5e74\u5ea6\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<h3>3. BEFORE \/ AFTER \u30c8\u30ea\u30ac\u3092\u56f3\u89e3<\/h3>\n<figure><!-- \u2605 \u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u56f3\u3092\u9069\u5b9c\u633f\u5165\uff08BEFORE \u2192 INSERT \u2192 AFTER \u306e\u9806\uff09 \u2605 --><br \/>\n<img decoding=\"async\" style=\"width: 100%; max-width: 640px;\" src=\"\/certified\/trigger_timeline_placeholder.png\" alt=\"BEFORE \/ AFTER \u30c8\u30ea\u30ac\u306e\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u56f3\" \/><figcaption>BEFORE \u306f\u201c\u4f1d\u7968\u306e\u4e0b\u66f8\u304d\u201d\u3067\u691c\u8a3c\u30a8\u30e9\u30fc\u3092\u9632\u6b62\u3001AFTER \u306f\u201c\u6e05\u66f8\u201d\u5f8c\u306b\u5408\u8a08\u6b04\u3092\u81ea\u52d5\u66f4\u65b0\u3002<\/figcaption><\/figure>\n<h3>4. \u30ab\u30fc\u30bd\u30eb\uff0b\u30c8\u30ea\u30ac\u9023\u643a\u30b5\u30f3\u30d7\u30eb\uff08PostgreSQL PL\/pgSQL\uff09<\/h3>\n<pre><code>CREATE OR REPLACE FUNCTION fn_order_sum_refresh()\nRETURNS TRIGGER AS $$\nDECLARE\n  rec order_t%ROWTYPE;\nBEGIN\n  FOR rec IN SELECT * FROM order_t WHERE cust_id = NEW.cust_id LOOP\n    UPDATE customer_sum\n       SET total = total + rec.amount\n     WHERE cust_id = rec.cust_id;\n  END LOOP;\n  RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n\nCREATE TRIGGER trg_order_after_ins\nAFTER INSERT ON order_t\nFOR EACH ROW\nEXECUTE FUNCTION fn_order_sum_refresh();<\/code><\/pre>\n<ul>\n<li><strong>\u89e3\u8aac\uff1a<\/strong>INSERT \u30c8\u30ea\u30ac\u767a\u706b \u2192 \u95a2\u9023\u884c\u3092\u30ab\u30fc\u30bd\u30eb LOOP \u3067\u96c6\u8a08\u66f4\u65b0<\/li>\n<li><strong>\u8a66\u9a13\u5bfe\u7b56\uff1a<\/strong><code>RETURN NEW<\/code> \/ <code>RETURN OLD<\/code> \u306e\u66f8\u304d\u5206\u3051\u3092\u660e\u793a\u3059\u308b\u3053\u3068<\/li>\n<\/ul>\n<h3>5. \u3088\u304f\u3042\u308b\u6e1b\u70b9\u30d1\u30bf\u30fc\u30f3<\/h3>\n<ol>\n<li><strong>\u30c8\u30ea\u30ac\u7121\u9650\u30eb\u30fc\u30d7\uff1a<\/strong>UPDATE \u5148\u306b\u540c\u3058\u30c8\u30ea\u30ac\u304c\u4ed8\u3044\u3066\u3044\u308b<\/li>\n<li><strong>\u30ab\u30fc\u30bd\u30eb\u672a CLOSE\uff1a<\/strong>\u7b54\u6848\u30b3\u30fc\u30c9\u6b04\u304c\u72ed\u304f\u3066\u3082\u7701\u7565\u4e0d\u53ef<\/li>\n<li><strong>BEFORE \u3067\u526f\u554f\u3044\u5408\u308f\u305b\u66f4\u65b0\uff1a<\/strong>\u6574\u5408\u6027\u9055\u53cd\u3067\u81ea\u6ec5<\/li>\n<\/ol>\n<p><!-- ========================= H2 \u30bb\u30af\u30b7\u30e7\u30f3\u2463 ========================= --><\/p>\n<h2>GRANT\u30fbREVOKE \u3068 ROLE \u8a2d\u8a08\u2502\u9375\u306e\u914d\u308a\u65b9\u30fb\u56de\u53ce\u3067\u5931\u70b9\u3057\u306a\u3044\u6a29\u9650\u30e2\u30c7\u30eb<\/h2>\n<h3>1. \u63a1\u70b9\u30dd\u30a4\u30f3\u30c8\u306f\u300c\u7c92\u5ea6 \u00d7 \u7d99\u627f \u00d7 \u53d6\u308a\u6d88\u3057\u9806\u5e8f\u300d<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u8a55\u4fa1\u89b3\u70b9<\/th>\n<th>\u7740\u773c\u70b9\uff08\u5348\u5f8c\u2160\u30fb\u2161\u306e\u63a1\u70b9\u57fa\u6e96\u4f8b\uff09<\/th>\n<th>\u6e1b\u70b9\u30d1\u30bf\u30fc\u30f3<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u7c92\u5ea6<\/strong><\/td>\n<td>\u5217\u30ec\u30d9\u30eb\uff0f\u30d3\u30e5\u30fc\u7d4c\u7531\u3067\u6700\u5c0f\u6a29\u9650\u306b\u7d5e\u308c\u3066\u3044\u308b\u304b<\/td>\n<td>\u4f55\u3067\u3082 <code>ALL\u00a0PRIVILEGES<\/code> \u3092\u4ed8\u4e0e<\/td>\n<\/tr>\n<tr>\n<td><strong>\u7d99\u627f<\/strong><\/td>\n<td><code>WITH\u00a0GRANT\u00a0OPTION<\/code>\uff0f<code>WITH\u00a0ADMIN\u00a0OPTION<\/code> \u306e\u4f1d\u64ad\u3092\u6b63\u3057\u304f\u8a00\u8a9e\u5316<\/td>\n<td>\u6a29\u9650\u306e\u201c\u518d\u59d4\u4efb\u201d\u7bc4\u56f2\u3092\u8aa4\u308b<\/td>\n<\/tr>\n<tr>\n<td><strong>\u53d6\u308a\u6d88\u3057\u9806\u5e8f<\/strong><\/td>\n<td><code>REVOKE \u2026 CASCADE<\/code> \u3068 <code>GRANTED\u00a0BY<\/code> \u306e\u5f71\u97ff\u3092\u8aac\u660e\u3067\u304d\u308b\u304b<\/td>\n<td>\u56de\u53ce\u5f8c\u306b\u6b8b\u6a29\u9650\u304c\u6b8b\u3063\u3066\u3044\u308b<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>2. \u9375\u3092\u914d\u308b\u30fb\u56de\u53ce\u3059\u308b 3 \u30b9\u30c6\u30c3\u30d7\uff08\u8eab\u8fd1\u306a\u305f\u3068\u3048\uff1a\u30de\u30f3\u30b7\u30e7\u30f3\u7ba1\u7406\uff09<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u30b9\u30c6\u30c3\u30d7<\/th>\n<th>DCL \u30b3\u30de\u30f3\u30c9<\/th>\n<th>\u4f8b\u3048\uff08\u7ba1\u7406\u4eba\u696d\u52d9\uff09<\/th>\n<th>\u6a21\u64ec\u30b3\u30fc\u30c9\uff08PostgreSQL\uff09<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u2460 \u6a29\u9650\u4ed8\u4e0e<\/td>\n<td><code>GRANT<\/code><\/td>\n<td>\u9375\u3092\u4f4f\u4eba\u3078\u624b\u6e21\u3057<\/td>\n<td>\n<pre><code>GRANT SELECT, INSERT\n  ON order_t\n  TO clerk_role;<\/code><\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\u2461 \u518d\u59d4\u4efb\u8a2d\u5b9a<\/td>\n<td><code>WITH GRANT OPTION<\/code><\/td>\n<td>\u9375\u306e\u201c\u5408\u9375\u4f5c\u6210\u6a29\u201d\u3092\u8a31\u53ef<\/td>\n<td>\n<pre><code>GRANT SELECT\n  ON order_t\n  TO manager_role\n  WITH GRANT OPTION;<\/code><\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\u2462 \u53d6\u308a\u6d88\u3057<\/td>\n<td><code>REVOKE \u2026 CASCADE<\/code><\/td>\n<td>\u9000\u53bb\u6642\u306b\u5408\u9375\u3082\u307e\u3068\u3081\u3066\u56de\u53ce<\/td>\n<td>\n<pre><code>REVOKE ALL\n  ON order_t\n  FROM clerk_role\n  CASCADE;<\/code><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3. ROLE \u8a2d\u8a08 4 \u30d1\u30bf\u30fc\u30f3\u3092\u56f3\u3067\u6bd4\u8f03<\/h3>\n<figure><!-- \u2605 \u30ed\u30fc\u30eb\u7d99\u627f\u56f3\u3092\u9069\u5b9c\u633f\u5165\uff08\u6a5f\u80fd\u5225\uff0f\u8077\u4f4d\u5225\uff0f\u7d44\u307f\u5408\u308f\u305b\uff09 \u2605 --><br \/>\n<img decoding=\"async\" style=\"width: 100%; max-width: 640px;\" src=\"\/certified\/role_design_placeholder.png\" alt=\"ROLE \u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u56f3\" \/><figcaption>\u6a5f\u80fd\u5225\u30ed\u30fc\u30eb \u2794 \u8077\u4f4d\u5225\u30ed\u30fc\u30eb \u2794 \u30e6\u30fc\u30b6 \u306e\u4e8c\u5c64\u69cb\u9020\u304c\u5348\u5f8c\u554f\u984c\u30e2\u30c7\u30eb\u30b1\u30fc\u30b9\u3002<\/figcaption><\/figure>\n<h3>4. \u201c\u30ed\u30fc\u30eb\u7206\u767a\u201d\u3092\u9632\u3050\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n<ol>\n<li><strong>\u547d\u540d\u898f\u5247\uff1a<\/strong><code>\u6a5f\u80fd_F<\/code> \u00d7 <code>\u8077\u4f4d_R<\/code> \u306a\u3069\u63a5\u5c3e\u8f9e\u3067\u53ef\u8996\u5316<\/li>\n<li><strong>\u6a29\u9650\u30d0\u30f3\u30c9\u30eb\uff1a<\/strong>\u4f3c\u305f\u64cd\u4f5c\u306f\u30b9\u30c8\u30a2\u30c9\u95a2\u6570\u306b\u30e9\u30c3\u30d7\u3057 <code>EXECUTE<\/code> \u3092\u4ed8\u4e0e<\/li>\n<li><strong>\u68da\u5378\u3057 SQL\uff1a<\/strong><code>\\dp+<\/code>\uff08PostgreSQL\uff09\u3001<code>DBA_TAB_PRIVS<\/code>\uff08Oracle\uff09\u3067\u73fe\u72b6\u78ba\u8a8d\u3092\u7b54\u6848\u306b\u6dfb\u3048\u308b\u3068\u52a0\u70b9\u5bfe\u8c61<\/li>\n<\/ol>\n<h3>5. \u5348\u5f8c\u2161\u3067\u305d\u306e\u307e\u307e\u66f8\u3051\u308b\u30c6\u30f3\u30d7\u30ec<\/h3>\n<pre><code>-- \u6a29\u9650\u4ed8\u4e0e\uff1a\u6a5f\u80fd\u5225\u30ed\u30fc\u30eb\nGRANT SELECT ON order_t TO r_reader;\nGRANT INSERT, UPDATE ON order_t TO r_writer;\n\n-- \u8077\u4f4d\u5225\u30ed\u30fc\u30eb\u306b\u6a5f\u80fd\u5225\u30ed\u30fc\u30eb\u3092\u307e\u3068\u3081\u308b\nGRANT r_reader TO clerk_role;\nGRANT r_reader, r_writer TO manager_role;\n\n-- \u9000\u793e\u6642\u306b\u4e00\u62ec\u56de\u53ce\nREVOKE r_reader, r_writer FROM clerk_role CASCADE;\nCOMMIT;<\/code><\/pre>\n<p>\u6a5f\u80fd\u5225\u30ed\u30fc\u30eb \u2192 \u8077\u4f4d\u5225\u30ed\u30fc\u30eb \u2192 \u30e6\u30fc\u30b6 \u306e 3 \u6bb5\u968e\u3067 \u201c\u4ed8\u4e0e\u30fb\u518d\u59d4\u4efb\u30fb\u56de\u53ce\u201d \u3092\u6574\u7406\u3059\u308c\u3070\u3001\u63a1\u70b9\u8868\u306e\u5168\u89b3\u70b9\u3092\u7db2\u7f85\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><!-- ========================= H2 \u30bb\u30af\u30b7\u30e7\u30f3\u2464 ========================= --><\/p>\n<h2>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u2502CREATE INDEX\u30fbCLUSTERED INDEX \u306e\u9078\u629e\u57fa\u6e96<\/h2>\n<h3>1. \u300c\u63a2\u3057\u7269\u306f\u56f3\u66f8\u9928\u306e\u201c\u7d22\u5f15\u201d\u300d\u2500\u2500\u307e\u305a\u306f\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u5f79\u5272\u3092 30 \u79d2\u3067<\/h3>\n<ul>\n<li><strong>B-tree \u30a4\u30f3\u30c7\u30c3\u30af\u30b9<\/strong>\uff1a\u56f3\u66f8\u9928\u306e \u201c\u4e94\u5341\u97f3\u7d22\u5f15\u201d\u3002\u9014\u4e2d\u304b\u3089\u629c\u3044\u3066\u3082\u6574\u5217\u304c\u5d29\u308c\u306a\u3044<\/li>\n<li><strong>\u30cf\u30c3\u30b7\u30e5\u30a4\u30f3\u30c7\u30c3\u30af\u30b9<\/strong>\uff1a\u30ed\u30c3\u30ab\u30fc\u306e \u201c\u6697\u8a3c\u756a\u53f7\u76f4\u884c\u691c\u7d22\u201d\u3002\u7b49\u4fa1\u6bd4\u8f03\u3060\u3051\u306a\u3089\u6700\u901f\u3060\u304c\u4e26\u3073\u66ff\u3048\u4e0d\u53ef<\/li>\n<li>\u5348\u5f8c\u554f\u984c\u3067\u306f\u300c<strong>\u7bc4\u56f2\u691c\u7d22\uff1dB-tree\u3001\u5b8c\u5168\u4e00\u81f4\uff1d\u30cf\u30c3\u30b7\u30e5<\/strong>\u300d\u306e\u5224\u65ad\u6839\u62e0\u3092\u8a00\u8a9e\u5316\u3067\u304d\u308b\u304b\u304c\u914d\u70b9<\/li>\n<\/ul>\n<h3>2. CREATE INDEX \u57fa\u672c\u69cb\u6587\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u65e9\u898b\u8868<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u76ee\u7684<\/th>\n<th>\u30ad\u30fc\u30ef\u30fc\u30c9<\/th>\n<th>\u5178\u578b\u69cb\u6587\uff08PostgreSQL \u4f8b\uff09<\/th>\n<th>\u6e1b\u70b9\u30d1\u30bf\u30fc\u30f3<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u7bc4\u56f2\u691c\u7d22\u9ad8\u901f\u5316<\/td>\n<td><code>CREATE INDEX<\/code><\/td>\n<td><code>CREATE INDEX idx_dt ON order_t(order_dt);<\/code><\/td>\n<td>\u65e5\u4ed8\uff0b\u6642\u9593\u578b\u3092 <code>EXTRACT()<\/code> \u3067\u5206\u89e3\u305b\u305a\u8907\u5408\u5217\u306b\u3057\u3066\u3057\u307e\u3046<\/td>\n<\/tr>\n<tr>\n<td>\u91cd\u8907\u8a31\u53ef \u00d7 \u30bd\u30fc\u30c8\u6e08\u307f\u8aad\u53d6<\/td>\n<td><code>CREATE UNIQUE INDEX<\/code><\/td>\n<td><code>CREATE UNIQUE INDEX idx_email ON user_t(email);<\/code><\/td>\n<td>NULL \u3092\u8a31\u5bb9\u3057\u305f\u307e\u307e UNIQUE \u5ba3\u8a00<\/td>\n<\/tr>\n<tr>\n<td>I\/O \u524a\u6e1b<\/td>\n<td><code>CLUSTER<\/code><\/td>\n<td><code>CLUSTER order_t USING idx_dt;<\/code><\/td>\n<td>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u4f5c\u6210\u5f8c\u306b CLUSTER \u3092\u5fd8\u308c\u308b<\/td>\n<\/tr>\n<tr>\n<td>\u8907\u5408\u6761\u4ef6<\/td>\n<td>INCLUDE \u53e5<\/td>\n<td><code>CREATE INDEX idx_cover ON order_t(cust_id) INCLUDE (amount);<\/code><\/td>\n<td>\u300c\u30ab\u30d0\u30fc\u30ea\u30f3\u30b0\u300d\u52b9\u679c\u3092\u8aac\u660e\u3067\u304d\u305a\u6e1b\u70b9<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3. \u51fa\u984c\u983b\u5ea6\u3067\u62bc\u3055\u3048\u308b\u300c\u8907\u5408\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\uff13\u9078\u300d<\/h3>\n<ol>\n<li><code>(\u9867\u5ba2 ID, \u6ce8\u6587\u65e5)<\/code> \u2500\u2500 \u58f2\u4e0a\u96c6\u8a08\uff0b\u7bc4\u56f2\u691c\u7d22<\/li>\n<li><code>(\u5546\u54c1\u30ab\u30c6\u30b4\u30ea, \u5358\u4fa1 DESC)<\/code> \u2500\u2500 \u4e0a\u4f4d N \u4ef6\u62bd\u51fa\uff08TOP-N \u30af\u30a8\u30ea\uff09<\/li>\n<li><code>\u90e8\u5206\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 WHERE status='A'<\/code> \u2500\u2500 \u30a2\u30af\u30c6\u30a3\u30d6\u884c\u3060\u3051\u7d22\u5f15\u5316\u3067 80% \u30d6\u30ed\u30c3\u30af\u524a\u6e1b<\/li>\n<\/ol>\n<p><strong>A\u2192Z \u65e9\u898b\u6cd5\uff1a<\/strong> C=<code>CLUSTER<\/code> \u2192 I=<code>INCLUDE<\/code> \u2192 P=<code>PARTIAL<\/code> \u3067\u300cCIP\u300d\u3068\u6697\u8a18\u3002<\/p>\n<h3>4. \u5b9f\u52d9\u305f\u3068\u3048\u3067\u7406\u89e3 \u2500\u2500\u300c\u672c\u68da vs. \u66f8\u5eab\u300d<\/h3>\n<ul>\n<li><strong>B-tree<\/strong>\uff1a\u80cc\u8868\u7d19\u9806\u306e\u958b\u67b6\u672c\u68da \u2015\u2015\u9014\u4e2d\u3067\u629c\u3044\u3066\u3082\u4ed6\u306e\u672c\u4f4d\u7f6e\u3092\u63a8\u6e2c\u3057\u3084\u3059\u3044<\/li>\n<li><strong>\u30cf\u30c3\u30b7\u30e5<\/strong>\uff1a\u9375\u4ed8\u304d\u66f8\u5eab\u30ed\u30c3\u30ab\u30fc \u2015\u2015\u756a\u53f7\u3092\u77e5\u3089\u306a\u3044\u3068\u63a2\u305b\u306a\u3044<\/li>\n<li><strong>CLUSTER<\/strong>\uff1a\u4eba\u6c17\u66f8\u7c4d\u3092\u5165\u53e3\u8fd1\u304f\u306e\u5e73\u68da\u306b\u79fb\u52d5\u3057 I\/O \u3092 1 \u5f80\u5fa9\u306b\u5727\u7e2e<\/li>\n<\/ul>\n<h3>5. \u5348\u5f8c\u8a66\u9a13\u3067\u6e1b\u70b9\u3055\u308c\u306a\u3044\u30c6\u30f3\u30d7\u30ec<\/h3>\n<pre><code>-- \u7bc4\u56f2\u691c\u7d22\u3068\u30ab\u30d0\u30fc\u30ea\u30f3\u30b0\u3092\u4e21\u7acb\nCREATE INDEX idx_ord_cust_dt\n  ON order_t(cust_id, order_dt)\n  INCLUDE (amount);\n\n-- \u76f4\u5f8c\u306b\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u3067 I\/O \u6700\u9069\u5316\nCLUSTER order_t USING idx_ord_cust_dt;\nANALYZE order_t;<\/code><\/pre>\n<h3>6. \u3088\u304f\u3042\u308b\u6e1b\u70b9\u30dd\u30a4\u30f3\u30c8\u96c6<\/h3>\n<ol>\n<li><strong>SELECTIVITY\uff08\u9078\u629e\u5ea6\uff09\u3092\u6570\u5024\u3067\u8a00\u3048\u306a\u3044<\/strong><\/li>\n<li><strong>\u66f8\u63db\u983b\u5ea6\u306e\u9ad8\u3044\u5217\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9<\/strong> \u2192 UPDATE\/INSERT \u6027\u80fd\u52a3\u5316\u3092\u8aac\u660e\u4e0d\u8db3<\/li>\n<li><strong>CLUSTER\/REINDEX \u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3092\u66f8\u304b\u306a\u3044<\/strong> \u2192 \u4fdd\u5b88\u8a08\u753b\u304c\u6b20\u843d\u6271\u3044<\/li>\n<\/ol>\n<p><!-- ========================= H2 \u30bb\u30af\u30b7\u30e7\u30f3\u2465 ========================= --><\/p>\n<h2>VIEW \u3068 WITH CHECK OPTION\u2502\u53c2\u7167\u5236\u5fa1\u3068\u30de\u30c6\u30ea\u30a2\u30e9\u30a4\u30ba\u30c9\u30d3\u30e5\u30fc\u306e\u4f7f\u3044\u5206\u3051<\/h2>\n<h3>1. \u300c\u7a93\u53e3\u3092\u5897\u3084\u3057\u3066\u3082\u3001\u5965\u306e\u91d1\u5eab\u306f\u5b88\u308b\u300d\u2500\u2500VIEW \u3067\u4f55\u3092\u96a0\u3057\u3001\u4f55\u3092\u898b\u305b\u308b\u304b<\/h3>\n<ul>\n<li>\u672c\u8868\u3092\u76f4\u63a5\u89e6\u3089\u305b\u305a\u3001\u5fc5\u8981\u5217\u30fb\u5fc5\u8981\u884c\u3060\u3051\u201c\u306e\u305e\u304d\u7a93\u201d\u3092\u958b\u3051\u308b <strong>\u8ad6\u7406\u7684\u30b5\u30d6\u30bb\u30c3\u30c8\u5316<\/strong><\/li>\n<li>\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30e6\u30fc\u30b6\u306b\u306f <code>SELECT<\/code> \u6a29\u9650\u3060\u3051\u3092\u30d3\u30e5\u30fc\u7d4c\u7531\u3067\u4ed8\u4e0e\u3057\u3001\u672c\u8868\u3078\u306e <code>INSERT\/UPDATE<\/code> \u3092\u906e\u65ad<\/li>\n<li>\u5348\u5f8c\u554f\u984c\u3067\u306f\u300c<strong>\u5217\u30ec\u30d9\u30eb\u6a29\u9650 vs. \u30d3\u30e5\u30fc\u7d4c\u7531\u6a29\u9650<\/strong>\u300d\u306e\u6bd4\u8f03\u8aac\u660e\u304c\u914d\u70b9\u30dd\u30a4\u30f3\u30c8<\/li>\n<\/ul>\n<h3>2. WITH CHECK OPTION \u306e\u3057\u304f\u307f\u3092\u56f3\u89e3<\/h3>\n<figure><!-- \u2605 WITH CHECK OPTION \u30d5\u30ed\u30fc\u56f3\u3092\u633f\u5165\u3059\u308b\u3068\u7406\u89e3\u304c\u6df1\u307e\u308a\u307e\u3059 \u2605 --><br \/>\n<img decoding=\"async\" style=\"width: 100%; max-width: 640px;\" src=\"\/certified\/check_option_placeholder.png\" alt=\"WITH CHECK OPTION \u306e\u30b2\u30fc\u30c8\u56f3\" \/><figcaption>\u30d3\u30e5\u30fc\u6761\u4ef6\u3092\u6e80\u305f\u3055\u306a\u3044 INSERT \/ UPDATE \u306f\u30b2\u30fc\u30c8\u3067\u62d2\u5426\u3002<\/figcaption><\/figure>\n<h3>3. \u30de\u30c6\u30ea\u30a2\u30e9\u30a4\u30ba\u30c9\u30d3\u30e5\u30fc\u3068\u306e\u9055\u3044\uff08\u5348\u5f8c\u2161\u3067\u6df7\u540c\u6ce8\u610f\uff09<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u9805\u76ee<\/th>\n<th>\u901a\u5e38 VIEW<\/th>\n<th>\u30de\u30c6\u30ea\u30a2\u30e9\u30a4\u30ba\u30c9\u30d3\u30e5\u30fc<\/th>\n<th>\u8a66\u9a13\u3067\u306e\u7740\u773c\u70b9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u5b9f\u4f53<\/td>\n<td>\u306a\u3057\uff08\u53c2\u7167\u6642\u306b\u90fd\u5ea6\u5b9f\u884c\uff09<\/td>\n<td>\u3042\u308a\uff08\u7d50\u679c\u30bb\u30c3\u30c8\u3092\u4fdd\u5b58\uff09<\/td>\n<td>\u201c\u5b9f\u884c\u8a08\u753b\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u201d\u3068\u8868\u73fe\u3067\u304d\u308b\u304b<\/td>\n<\/tr>\n<tr>\n<td>\u66f4\u65b0\u53cd\u6620<\/td>\n<td>\u5373\u6642<\/td>\n<td><code>REFRESH<\/code> \u5fc5\u8981<\/td>\n<td><code>FAST<\/code>\uff0f<code>COMPLETE<\/code> \u30e2\u30fc\u30c9\u8aac\u660e<\/td>\n<\/tr>\n<tr>\n<td>\u66f8\u8fbc\u53ef\u5426<\/td>\n<td>\u6761\u4ef6\u4ed8\u304d\u53ef\uff08\u30ad\u30fc\u4fdd\u6301\u306a\u3069\uff09<\/td>\n<td>\u57fa\u672c\u4e0d\u53ef\uff08\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u3067\u5168\u6d88\u53bb\uff09<\/td>\n<td>\u66f4\u65b0\u30bf\u30a4\u30df\u30f3\u30b0\u3092\u7b54\u6848\u306b\u660e\u793a<\/td>\n<\/tr>\n<tr>\n<td>\u7528\u9014<\/td>\n<td>\u6a29\u9650\u5236\u5fa1\u30fb\u5217\u884c\u30d5\u30a3\u30eb\u30bf<\/td>\n<td>\u96c6\u8a08\u9ad8\u901f\u5316\u30fb\u30c7\u30ab\u30eb\u30c8\u7e2e\u5c0f<\/td>\n<td>\u300c\u5927\u91cf\u96c6\u8a08 \u00d7 \u5b9a\u6642\u30d0\u30c3\u30c1\u300d\u3067\u4f7f\u3044\u5206\u3051<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>4. \u8a66\u9a13\u983b\u51fa VIEW \u30c6\u30f3\u30d7\u30ec\uff12\u7a2e<\/h3>\n<ol>\n<li><strong>\u5217\u30d5\u30a3\u30eb\u30bf\uff0b\u5217\u30ec\u30d9\u30eb\u6a29\u9650<\/strong>\n<pre><code>CREATE VIEW v_staff_public AS\n  SELECT emp_id, emp_name, section\n    FROM staff_t;\nGRANT SELECT ON v_staff_public TO all_staff;<\/code><\/pre>\n<\/li>\n<li><strong>\u884c\u30d5\u30a3\u30eb\u30bf\uff0bWITH CHECK OPTION<\/strong>\n<pre><code>CREATE VIEW v_order_active AS\n  SELECT * FROM order_t WHERE status='A'\n  WITH CHECK OPTION;<\/code><\/pre>\n<p>CHECK OPTION \u306b\u3088\u308a\u3001\u30d3\u30e5\u30fc\u6761\u4ef6\u3092\u6e80\u305f\u3055\u306a\u3044\u884c\u306f INSERT \/ UPDATE \u3067\u304d\u306a\u3044\u3002<\/li>\n<\/ol>\n<h3>5. \u3088\u304f\u3042\u308b\u6e1b\u70b9\u30d1\u30bf\u30fc\u30f3<\/h3>\n<ul>\n<li><strong>PL\/pgSQL \u3067\u30d3\u30e5\u30fc\u540d\u3092\u76f4\u63a5 INSERT<\/strong> \u3057\u3001<code>WITH CHECK OPTION<\/code> \u3092\u5fd8\u308c\u308b<\/li>\n<li><strong>\u30de\u30c6\u30ea\u30a2\u30e9\u30a4\u30ba\u30c9\u30d3\u30e5\u30fc\u3092\u5373\u6642\u53cd\u6620\u7528\u9014\u306b\u4f7f\u7528<\/strong> \u2192 REFRESH \u9045\u5ef6\u8aac\u660e\u4e0d\u8db3\u3067\u6e1b\u70b9<\/li>\n<li><strong>\u30d3\u30e5\u30fc\u5c64\u3092\u307e\u305f\u3050\u6a29\u9650\u4f1d\u64ad\u3092\u8a18\u8ff0\u3057\u306a\u3044<\/strong> \u2192 \u201c\u6700\u5c0f\u6a29\u9650\u201d\u89b3\u70b9\u3067\u6e1b\u70b9<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u2015\u2015DDL\uff08Data Definition Language\uff09\u306f\u300c\u30c6\u30fc\u30d6\u30eb\u306e\u8a2d\u8a08\u56f3\u300d\u3092\u63cf\u304d\u3001DCL\uff08Data Control Language\uff09\u306f\u305d\u306e\u8a2d\u8a08\u56f3\u3092\u300c\u8ab0\u304c\u3001\u3069\u3053\u307e\u3067\u89e6\u308c\u308b\u304b\u300d\u3092\u6c7a\u3081\u308b\u201c\u9375\u201d\u3002 &#8230; <\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","columnck":"","stmeta_robots":"index, follow","st_titlewords":"","st_title_extra":"","st_keywords":"","st_description":"","st_display_ad_mark":"","st_display_ad_mark_hide":"","textcopyck":"","st_copyright":"","st_copyurl":"","eyecatch_set":"","st_youtube_url":"","st_youtube_eyecatch":"","headerwidget_set":"","updatewidget_set":"","kanrenwidget_set":"","ikkatuwidget_set":"","koukoku_set":"","auto_adsense_koukoku_set":"","st_redirect":"","st_redirect_url_as_canonical":"","st_redirect_pvm_do_not_track":"","post_data_updatewidget_set":"","st_post_header_under_bg":"","st_twitter_tag":"","affinger_note":"","rankdisplayck":"","st_head_code":"","st_footer_code":"","st_post_header_under_code":"","_st_toc_override":false,"_st_toc_settings":[]},"categories":[3],"tags":[6],"class_list":["post-5534","post","type-post","status-publish","format-standard","hentry","category-ipa","tag-6"],"_links":{"self":[{"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/posts\/5534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/comments?post=5534"}],"version-history":[{"count":0,"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/posts\/5534\/revisions"}],"wp:attachment":[{"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/media?parent=5534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/categories?post=5534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sky-peace.net\/certified\/wp-json\/wp\/v2\/tags?post=5534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}