プロが教える店舗&オフィスのセキュリティ対策術

現在、ブランド管理システムの構築に携わらせていただいております。
まだまだ、勉強中の身で気になることだらけです。
MySQL+PHPの組み合わせにて構築を行っております。
1.データベース内に管理番号という項目があり、その項目はデータの呼び出し、更新、他のテーブルとの紐付けに使われ、
この値を書き換えるということはされない項目です。(auto increment、primary keyが設定されております)
現在は、bigint(20)と設定されておりますが、扱える桁数を万が一超えるとなるととても怖いのですが、これ以上桁数を増やすことはできるのでしょうか。
2.1の項目をweb上にて呼び出しを行い、1のような使い方の場合(呼び出した値への加工を行わない)、整数型では扱える範囲(PHP_INT_MAX)を超えている場合になった場合は影響があるのでしょうか。

先輩に聞いてもそう決まっているという回答しか答えていただけません。
詳しい方、是非教えていただけませんでしょうか。

A 回答 (4件)

たぶん勘違いをしているか、運用方法が間違いっています



マスター系のテーブルで「品目を特定」するのにauto incrementで
発行されるidで管理することはありえません。
auto incrementでプライマリ処理を行うメリットは単に
「レコードを特定」するためのものですから、

品目を特定するidいわゆる品目コードは運用ルールを決める際の
要求定義、要件定義によってルール化される必要があります。
もちろん数値だけで構成されていてもよいですし、
アルファベットやハイフンなどを混ぜてもよいでしょう。
オペレーターの入力しやすさやタイプミスを減らすことを考えれば
固定長の数値のみがベターだと思います。

結論をいえばbigintの出る幕はありません。
    • good
    • 0

20桁の数字で一秒間に1万レコード生成されるとして、それが消費し尽くさせるまでに


どれだけの時間がかかるか計算してみましょう。
    • good
    • 0

1.


bigintで符号なしなら 0 から 18,446,744,073,709,551,615 まで扱えますが、それでも足りないのでしょうか?
これ以上は数値として扱えませんので文字列として処理するしかありませんが、その場合DB側で自動採番できませんのでプログラムで工夫する必要があります。

2.
DBから取得してきた値は、PHP側で適当な型に当てはめてくれます。
数値として扱えない場合は文字列として保持してくれますので、足し算・引き算等の算術計算をせずHTMLに出力するだけなら問題ありません。
    • good
    • 0

とりあえず 1. だけ。


たしかに現状のシステムではそのブランドの点数なりなんなりでテーブルの行数が 18446744073709551616 を超えるならば問題でしょう。私はそれは杞憂だと思いますし、たぶん先輩も左記の値を超えるような事態は非現実的と考えているのでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!