(0)目次&概説
(1) テーブル定義の検討項目
(2) データ型について
(2-1) char
(2-2) nchar
(2-3) varchar
(2-4) nvarchar
(3) 桁数とバイト数
(3-1) tinyint
(3-2) smallint
(3-3) int
(4) その他:データベースキャラクターセット
(4-1) キャラクターセットとは?
(4-2) どのような場面で使われる
(1) テーブル定義の検討項目
この節ではDBのテーブル定義において検討が必要となる項目と、それぞれの説明を記載します。
| 論理名 | 実装で使わない別名で、仕様書やコミュニケーションを容易にするために付ける名前。 |
| 物理名 | 実装で使う名前で、DBのカラムを一意に特定する。 |
| PK | RDBでレコードを一意に識別するためのカラム。一意制約+NotNull制約を組み合わせたものと同等。 |
| NotNull | 空値を許容しない設定。例えば従業員テーブルで従業員番号に対して、必ず従業員の名前があるためNOT NULLを設定する。 |
| パーティションキー | ・パーティションにはいくつも種類があり「レンジ」「リスト」「ハッシュ」などがある。 ・Oracleの場合はパーティションは専用のセグメントに格納されます ・表をパーティション化する主な理由 ①データが大規模(2GB以上)の場合 ②期間等で区切れて特定の期間のみ更新される場合 ③操作するデータを限定する事によるパフォーマンス向上(しかしテーブルは同じのためAP的には差を意識せずに済む) |
| インターバル | レンジパーティションの拡張機能で、インターバルを設定しておくと、必要に応じて新しいパーティションを作成してくれます。 (例)四半期の区分 PARTITION Q1 VALUES LESS THAN (TO_DATE(‘2019-04-01′,’yyyy-mm-dd’)) PARTITION Q2 VALUES LESS THAN (TO_DATE(‘2019-07-01′,’yyyy-mm-dd’)) PARTITION Q3 VALUES LESS THAN (TO_DATE(‘2019-10-01′,’yyyy-mm-dd’)) PARTITION Q4 VALUES LESS THAN (TO_DATE(‘2020-01-01′,’yyyy-mm-dd’)) |
| データ型 | カラムのデータ型を指定します(※後述の「データ型」の章を参照) |
| 桁数 | カラムの桁数を指定します(※後述の「桁数」の章を参照) |
| バイト数 | カラムのバイトを指定します(※後述の「桁数」の章を参照) |
| デフォルト値 | カラムのデフォルト値を設定します。 |
| コード値 | コード値を保持するカラムである場合、そのルールを記述する。 |
| インデックス | インデックスを貼ったカラムがあれば、その情報を指定します。 |
(2) データ型について
型名に「var」が付くのは可変長である事を意味し、「n」が先頭に付く場合はUnicode対応(全角にも対応)で、先頭に無い場合はASCII対応です。
(2-1) char
char:固定長の半角文字列
例:char(2)はA1、A2、A3など
(2-2) nchar
nchar:固定長の全角文字列
例:nchar(2)は1金、2金、3金など
(2-3) varchar
varchar:可変長の半角文字列
例:名前とか
(2-4) nvarchar
nvarchar:可変長の全角文字列
例:名前とか
(3) 桁数とバイト数
int型は以下のように、いくつか種類があります。
(3-1) tinyint
tinyint:0~255まで保持可能。
2桁に確実に収まるなら使用可能で、1バイトを消費する。
(3-2) smallint
smallint:-32,768~32,767まで保持可能。
4桁に確実に収まるなら使用可能で、2バイトを消費する。
(3-3) int
int:-2,147,483,648~2,147,483,647まで保持可能。
9桁に確実に収まるなら使用可能で、4バイトを消費する。
nvarcharはUnicodeを扱うため、全角半角問わず同じバイト数で格納する。つまり、nvarchar(10)は半角10文字、全角10文字を格納できる?
(4) その他:データベースキャラクターセット
(4-1) キャラクターセットとは?
下記の記事でも触れていますが、DBの文字列(CHAR,VARCHARなど)に関わる文字コード(正確には①「符号化文字集合」と②「文字符号化方式」)の指定をします。
https://rainbow-engine.com/linux-oracle-db-install4/#title10
①「符号化文字集合」と②「文字符号化方式」については下記の記事を参照頂けたらと思います。
https://rainbow-engine.com/linux-garbled-japanese/
(4-2) キャラクタセット確認用のSQL
データベースキャラクターセットは以下のSQLを使って確認ができます。
SELECT *
FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
(図1)

(図2)
