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

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

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

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

7回答

11302閲覧

銀行口座番号は文字列型で保存すべきか

azuno_mix

総合スコア71

SQL

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

2クリップ

投稿2016/08/09 08:55

編集2016/08/09 08:55

銀行口座番号をどの型で保存するべきか

現在、RailsでMySQLを用いたデータベース設計を考えています。
一度、Integer型で保存する形で実装しましたが、先頭が0から始まる銀行口座番号の場合はゼロが消えてしまいます(あたりまえなのですが・・・)

一般的に銀行口座番号をデータベースで管理する場合、設計としては文字列型として管理するのが一般的なのでしょうか?

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

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

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

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

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

guest

回答7

0

計算しない項目は文字型。というセオリーがあります。

投稿2016/08/09 12:35

maiko0318

総合スコア876

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

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

azuno_mix

2016/08/10 14:32

なるほど、単純で明確なセオリーですね!
guest

0

ベストアンサー

文字列の方が扱いやすいと思います。
他の回答者も言っていますが、他システムと連携する場合の全銀協フォーマットはテキストベースなので、そのまま利用しやすいです。
また検索する場合も、頭1ケタが○とか、検索しやすいと思いますし。
SELECTした結果を一覧で見るときも桁が揃っていると見やすいですし。

投稿2016/08/09 09:05

ttyp03

総合スコア16998

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

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

azuno_mix

2016/08/10 14:29

どれもなるほど、と思う理由でした。 ありがとうございます!
guest

0

「文字列」派の回答ばかりですので、あえて(笑)別の意見を提示させていただきます。

以下のリンクはデータベース実践入門などの著者である奥野 幹也氏のブログです。
(リンク内では学籍番号を話題にしています)

http://nippondanji.blogspot.jp/2013/12/blog-post_8.html

桁数とは、本質的には表示の問題である。

(中略)学籍番号は数値なのだからデータベース上では数値として表現するべきであり、表示の問題はアプリケーションに任せるべきなのだ。

なぜ「数値は数値として表現するべき」なのかというと、以下が理由になると思います。

さらに言うと、学籍番号にとって適切なドメインとは有限個の自然数(0を含まない非負の整数)の集合であって文字列ではないということだ。

私の解釈では、学籍番号(や、口座番号)のドメインは「0を含まない非負の整数」なのだから、DB上のカラムもその通りに定義しないと、例えば

  • アプリケーションの不具合によって負数や数字以外の文字が混入してしまう事態を防げない
  • "1"、"001"、"0000001"を同じ口座番号とみなすことが難しくなる

などの不都合が生じる可能性がある、ということだと思います。


ちなみに、実は私も「どちらでも良いと思う」派です(笑)。

それぞれのメリット・デメリットを把握した上で、
azuno_mix 様が構築されようとしているシステムにとって都合の良い方を選択すれば良いと思います。

蛇足ながら、ドメイン設計に関して参考になりそうなリンクを、いくつか紹介させていただきます。
http://nippondanji.blogspot.jp/2013/12/blog-post_4.html
http://nippondanji.blogspot.jp/2013/12/id.html

投稿2016/08/09 10:29

KiyoshiMotoki

総合スコア4791

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

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

azuno_mix

2016/08/10 14:29

奥野 幹也氏のブログ、すごく興味深い話でした。 ありがとうございます!
down_voter

2016/08/13 01:31

口座番号というのは数値ではなく(数字を使った)文字列です。数値と数字を混同しないでください。 数値かどうかは算術演算可能な性質を持つのかでも一般的には判断できます。
KiyoshiMotoki

2016/08/13 04:18

down_voter様 コメントありがとうございます。 しかし、私が挙げさせていただいているのはあくまで"ドメイン"の話です。 それに > 数値かどうかは算術演算可能な性質を持つのかでも一般的には判断できます という論理を杓子定規に当てはめると、IDとしての性質を持つ数字は全て、文字列で定義しなければならなくなりますよ。
guest

0

私も文字型で保存すべきと考えます。
口座番号ということは、顧客データレコードに付随する項目かと推察いたしますが、
そうであれば、かなりのレコード件数になるかと存じます。

当然、顧客データレコードにはシーケンスキーが割り当てられてているかと思いますので、そちらのほうを数値データとしていれば、数値データから口座番号にたどり着く方法と、文字検索から口座番号にたどり着く方法をとることができます。

気おつける点としては、口座番号の仕様にもよりますが、数字の文字列のみということであれば、データベースに登録前に、プログラム側で数字以外の文字列が混ざっていないかと、他のレコードの口座番号と重複していないかをチェックする必要があるかと存じます。

投稿2016/08/09 09:21

KenjiObata

総合スコア440

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

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

azuno_mix

2016/08/10 14:30

文字列にした際のバリデーションについても言及していただき、ありがとうございました!
guest

0

どちらでも良いと思いますが、文字列のほうが扱いやすそうですね。

重要なのは、他システムと連携する際の扱いです。
他システムと連携するときのI/F仕様は予め决定できないので、その際にどのように受け渡すかを
先方と調整する必要があります。

参考までに、全銀協規定フォーマットです。
http://www.hyogokenshin.co.jp/internet_bk/pdf/format1.pdf

投稿2016/08/09 09:00

moonphase

総合スコア6621

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

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

azuno_mix

2016/08/10 14:29

全銀協規定フォーマット、知りませんでした。 勉強になりました!
guest

0

前ゼロやハイフンがありえるため、文字型で保存する必要があります。
もし他ホストなどと連携する場合、ほかの方の通り全銀フォーマットに準ずる必要があります。

投稿2016/08/09 11:26

randr

総合スコア202

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

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

azuno_mix

2016/08/10 14:32

他ホストとの連携が将来的にあるかもしれない可能性も考えると今後も全銀協フォーマットに準じた設計を心がけたいと思います。
guest

0

銀行口座だけにとどまらず頭に0がつき桁数をそろえるような内容は、文字列型にしています。
よくExcel使うときに発生しますね
銀行口座だけにとどまらず身近では、郵便番号や電話番号などのデータはすべて文字列にしています

ただ口座番号をそのまま登録するという行為はしたくない行為ではあります。
何らかな暗号化の手段も同時に考えておいた方がいいですね

投稿2016/08/09 09:33

date

総合スコア1820

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

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

azuno_mix

2016/08/10 14:31

暗号化について、言及していただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問