質問: MySQLにおいて、数値を格納するカラムがあります。 通常であれば、桁数的にTINYINTのUNSIGNEDで十分足りる感じです。 ところがここに、一部、文字列を格納する必要があります。 この場合、INT系(と言っていいのか?)のデータ型は使えなくなるので、VARCHARあたりにしようかと思うのですが。 INSERTやUPDATEの際に数値データであっても文字列として扱うようにする等、まぁ気を付けるべきところは気を付けるとして、データベースのパフォーマンス上、やはり有意な差が生まれてしまうものでしょうか? 文字列で扱わなければならない場合のみ、テーブルを分けるという方法もできなくはないのですが、その方が好ましいのでしょうか? ===追記=== 質問の仕方が悪かったかもしれません。 個人別データを記述したテーブルAには、所属する部署コードと適用される勤務シフトコードのカラムがあります。 部署データは、INT UNSIGNED AI でコードを生成されたテーブルになります。 勤務シフトデータは、部署データのコードをキーに設定したテーブルです。 つまり、部署ごとに勤務シフトが一応決まっていて、個人別データにおいて部署コードと勤務シフトコードのカラムの値は基本的には同一になる設計です。 ところが一部、所属する部署の勤務シフトとは異なる勤務シフトを設定した場合があり、これをどのように扱うかを検討する際に、 勤務シフトデータのテーブルに、部署コードではなく従業員コードをキーに放り込んだデータを用意することとしましたが、当然ですがそれでは部署コードと従業員コードが重複する可能性が排除できません。 そこで、その場合は、なんらかの接頭辞_従業員コードをキーに放り込めば、重複を回避することができます。 但しその場合、キーに使うカラムをINT型ではなくVAECHAR型にする必要があり・・・ という前提のもと、 ・VERCHAR型で作った場合と ・(接頭辞をつけるようなデータは入れないように見直して)INT型で作った場合 パフォーマンスにおいて有意な差が出るかどうか、というのが質問です。
回答: * int(tinyint?)のカラムを2列つくって常に数値だけで管理するか * 普通にvarcharか * 予めデータがきまっているならsetを使うか正規化する