2012-01-29 12 views
3

私は検索フォームに取り組んでいて思考型のスフィンクスを使用していて、フィルタリングされた属性に対しては整数だけが受け入れられますが、私の国はその名前を含む文字列としてdbに格納されているからです。国名は、その名前を含む文字列ではなく、データベースに整数/数値として格納されていますか?

私は自分の国リストを作成し、selectメニューに表示する文字列と、dbに格納する整数値を作成します。ちょうど私が使用している宝石(レール上のルビー)の開発者がちょうど文字列を含む配列を作成することにしたのはなぜだろうか。

この質問はプログラミング言語に固有のものではありません。データベースはデータベースです。

大切にしてください。

答えて

5

私は別のテーブルに国を持つことを示唆していますそれぞれに割り当てられた一意のID。それは害はありませんが、データベース構造をより柔軟にします。こうすることで、必要な場合に備えて、国に関連する情報を追加し、必要に応じて他のテーブルを関連付けることができます。

文字列で行を検索することはパフォーマンス上の問題でもあります。国IDを見つけるために別のテーブルを照会することは、あまりにも大きな圧力を引き起こしません。

+0

200以上の行(つまり国の数)のテーブルを検索する場合にパフォーマンスが問題になる場合は、idを追加しても問題は解決しません。それでも、正規化されたモデルを持つことが望ましいです。 – Daniel

+0

したがって、私は国のテーブルを作成し、それを国に設定し、それを表すために割り当てられた各IDを使用します。例えば。 dbにヒットした最初の国は自動的にid(1)を取得します。 – LondonGuy

+0

@GregoryHouseはい。あなたは、IDの列を自動化するためにID列['auto_increment'](http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html)を設定することができます。 –

-2

私の個人的意見では、国名は変更されず(通常は)、「更新」はないため、国名を文字列としてデータ保管場所に格納すると、より適しています。

だから、私はそれを文字列として保存するのは合理的だと思います。

+4

私の経験では、南スーダンは常に変化しています。例えば、1年以上です。開発中のシステムに影響を与えるかどうかは別の問題です。 – Daniel

+0

国を別のテーブルに保存しない理由はありません。 –

+0

はい、別のテーブルに保管すると間違っているとは言わなかったのですが、正当な可能性もあります。それはまた、プロジェクトのサイズに依存します(プライベートまたは大きな商業プロジェクトの場合...) – pila

0

国の整数マッピングでメインルックアップテーブルを格納するほうがよいでしょう。 それから、国は国別ID(整数)として他のテーブルで参照できます。私たちはその後、DBに格納されている実際の文字列に対するクエリの国の文字列は、単に2つの数値を比較することに比べ として、より高価な比較である を比較する国に関連するすべてのデータにアクセスしようとすると、

一つの理由です。

+0

種類はアクセスパターンによって異なります。私たちが(この場合のように)idを比較することでより良いパフォーマンスを得ることができる国を探しているならば、あなたのアクセスの大半が(ある意味で)別の行のデータを取得しているなら、 (余分な結合を避けるために)他の情報と同じテーブルに保存し、使用可能なすべての国をメモリに保存します。それは200を少し上回っているので、かなり受け入れられます。 – Daniel

0

私はあなたが別のテーブルの国々は、ID、名前、短い名前と、あなたは検索のためにそのIDを使用することができると言う保管すべきだと思う。..

2

もちろん国名は常にかどうかを直接主キーとして国名を使用し、または主キー

私のスタンドは、主キーとして整数を使用している、ように整数の別の列を使用するだけのことを、文字列になりますその国の名前の更新は後で簡単になります(たとえ起こることはありませんが起こる可能性があります)。国名に基づいた検索の問題については、単にインデックスを作成してください。

関連する問題