Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Database (データベース) SQL

データベースのテーブル定義の検討ポイント及びカラムのデータ型や桁数・バイト数について

投稿日:2019年12月22日 更新日:

(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)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Database (データベース), SQL

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

論理テーブル設計と物理テーブルデータ設計の違いや特徴

  <目次> (1) 論理テーブル設計と物理テーブルデータ設計の違いや特徴  (1-1) 論理テーブル設計とは?  (1-2) 物理テーブル設計とは?  (1-3) 両者の違い (1) 論理 …

インピーダンスミスマッチとは?を分かりやすく説明

<目次> (1) インピーダンスミスマッチとは?を分かりやすく説明  (1-1) 概要  (1-2) 具体例 (1) インピーダンスミスマッチとは?を分かりやすく説明 (1-1) 概要 「インピーダン …

システム開発におけるデータモデリングの方法とER図描画ツール紹介

(0)目次&概説 (1) 項目を洗い出す  (1-1) 現行システムが存在する場合  (1-2) 新規システムを開発する場合 (2) エンティティを定義する  (2-1) エンティティの作成  (2- …

SQLでCASE文の結果をWHERE句に指定する方法およびコスト面の考察

本記事では、 ・SQLでCASE文の結果をWHERE句に指定する方法について記述します。 ・CASE文を使う場合のコストについて考察します。 (0)目次&概説 (1) NG例 (2) OK例&解説 ( …

  • English (United States)
  • 日本語
Top