質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

3841閲覧

データベース基本の2 VARCHAR2とUnicodeと桁数の計算

cancat

総合スコア313

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/10/20 05:18

編集2017/10/20 05:44

こんにちは。
データベースを設計しています。

PK SEQ カラム名(論理) カラム名(物理) 型 桁 "物理 サイズ" "NOT NULL" IX PT 項目説明および、リスト値 1 1 ユーザID Id CHAR 7 ○ ユーザID。英字3+数字4文字。 2 ユーザ名 UserName VARCHAR2 50 ユーザ名 3 登録日時 RegistDateTimeGTM DATE - ○ 登録日時(GMT) 4 ロック日時 LockedDateTimeGTM DATE - ロック日時(GMT) 5 ロックステータス LockStatus CHAR 1 ロックステータス(Locked=L, Free=F) 6 権限 Authority CHAR 1 ○ 権限(管理者=A、一般=P)。Administrator, Peopleの略。 7 ログイン日時 LoginDateTimeGTM DATE - ○ ログイン日時(GMT) 8 最終ログイン日時 LastLoginDateTimeGTM DATE - ○ 最終ログイン日時(GMT) 9

Q1 Unicode UTF16で日本人想定でVARCHAR2 50は適当か?
Q2 マルチバイト文字はSJISでは1文字2バイト、Unicodeでは1文字3バイト。この場合、桁数はどう計算するのでしょう?
姓名でひとつ、MAX30文字、ミドルネームなしの場合30文字VARCHAR2なら30桁、というものではない?
Q3 NOT NULL = ○って、NULLOKってこと?
Q4 NULL 可OK○/不可NG×-という書き方とどっちが素直でしょう?
Q5 カラム名とかにもコメントいただけると嬉しいです。
Q6 PKとSEQはどう割り当てるものでしょう?
Q7 ここにはないけど、外部キーを書くときは表を別にするものですか?

###補足情報(言語/FW/ツール等のバージョンなど)
たぶんOracle(確認中)

です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テーブル定義書か何かの書き方でしょうか。

Q1

Oracle の Unicode は AL32UTF8 になると思います。
また、桁数なのかバイト数なのかははっきりさせるべきです。
十分かどうかは何文字まで想定しているかによりますが、姓名併せて30~40文字あれば足りるのでは。

Q2

バイト数指定の場合で最大30文字想定とするのであれば
最大値(30*3バイト)の 90 バイト指定ですかね。
桁数ならそのまま30文字です。

Q3、Q4

一般的には "NOT NULL の制約を付ける" ⇒ "NULL を許可しない" という意味だと思います。
NOT NULL 制約を付ける ○、つけない 空欄 or - が多い気がします

Q5

GTM と GMT が混ざってますね。
他にもテーブルがあって同じ単語を使っているカラムがあれば踏襲した方が無難です。
極端ですがログイン日時が LoginDateTime と LoginTime のテーブルが混ざったりすると後々面倒です。
またOracleの場合は 30バイトまでですので長くなりそうなら短縮が必要になります。

Q6

PK はテーブルの使い方、SQL 次第です。
制約が付くので一意の列に振られることになります。
(多くの場合はID列に付いたりしてますが)
SEQ はテーブルとは別定義ですね。

Q7

表を別にする がわからなかったのですが、キー付与する列がある
テーブル定義には記載が必要と思います。

投稿2017/10/20 13:25

編集2017/10/20 13:31
hy1234

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/10/23 01:20

細かくありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問