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

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

新規登録して質問してみよう
ただいま回答率
85.48%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

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

Q&A

解決済

2回答

8242閲覧

区分値は数値にすべきか意味のある文字列にすべきか

runny_nose

総合スコア280

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

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

2グッド

2クリップ

投稿2018/10/24 08:58

区分値となるカラムを設計する際、
例えば性別の場合、

①数値毎に意味を持たせる
0 = 不明
1 = 男性
2 = 女性

IDNameGender
1Kris0
2John1
3Jane2

②意味のある文字列にする
Unknown = 不明
Male = 男性
Female = 女性

IDNameGender
1KrisUnknown
2JohnMale
3JaneFemale

のようにするのとでは、どちらが一般的なのでしょうか?
(性別の場合、U/M/F でもいい気はしますが、これもパターンとしては①だと思います)

①の場合、何を意味するのかが分からず設計書を調べるなどしなければならず面倒ですし、
コーディング時のミスにもつながるかと思います。
②の場合はデータ量が若干増える、CHECK制約をつけない場合にタイポを防げないなどのデメリットはあるかと思いますが、
それを踏まえても個人的には②で分かりやすくなるメリットの方が大きいと素人ながらに思うのですが、
一般解としてはどちらがよいのでしょうか?
(SQLアンチパターンなども調べましたが見つからず。。。)

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

無関係かもしれませんが、DBMSはSQLServer、このDBを扱うプログラムの言語はC#.NETです。(カラム名がパスカルケースなのはその関係)

inaP, dice142👍を押しています

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

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

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

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

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

guest

回答2

0

自分が設計するのであれば、「キーとしての数値を用意する+マスターテーブルを用意して、意味論はそちらに詰め込む」という方向で考えます。

idslugname
1male男性
2female女性
9unknown不明

マスターテーブルがあれば、「意味的な情報が必要ならそちらから取り出せる(特に、ORM環境があればものすごく便利)」「外部キーをかけることで、不適切な値が入らなくなる」など、運用上も好都合です。

投稿2018/10/24 09:07

maisumakun

総合スコア145183

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

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

runny_nose

2018/10/24 10:03

ご回答ありがとうございます!! ただ、大変申し訳ありません、よい例えが思いつかず、性別を用いてしまった私が完全によくなかったのですが、 私のお聞きしたかった区分値とは、性別のように区分自体に名称などのマスタが必要なわけではなく、 プログラム上の処理分岐にのみ使うような、真偽値ではないけどもフラグに近いような、 別途マスタで定義するほどでもないものを指しておりました。 例が悪く後だしのようになってしまいほんとに申し訳ありません。 ありがとうございます。
guest

0

ベストアンサー

性別に限って言えば、以前バズってましたね
https://qiita.com/aoshirobo/items/32deb45cb8c8b87d65a4

一般的には、文字列も数字もどちらもあり答えは難しいと思います
性別や電話番号など、世界的に一般的な要素については、探せばそれぞれ標準規格があったり、ディスカッションされているので都度調べるのが良いのではないでしょうか

オリジナルの要素である場合は、それぞれ利点欠点があり、要件に依存すると思います。
場合によってはどっちでもよくて決めの問題になりますが、一貫性があるとなおよいと思います。
(ちなみに考慮として漏れがちになるのが可変性、変更する時どれだけ面倒くさいかです。追加、削除、変更があった時どうなるか)

投稿2018/10/24 09:39

kosanai

総合スコア471

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

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

runny_nose

2018/10/24 10:12

ご回答ありがとうございます! このような標準規格があったとは! 今回のご質問での"区分値"はまさに後者のオリジナルの要素を指しておりました。 (例えが悪く申し訳ありません・・・。) 一般解はない(要件次第)という結論かと思います。 むしろ②のパターンがアンチパターンではないと知れただけでも大きいです。 可変性などしっかり考慮し、検討したいと思います。 大変ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問