他の人が列挙型とnosqlをどのように扱うのか興味がありますか?属性を列挙値または文字列として格納する方がよいですか?これは、データベースのサイズやパフォーマンスに影響する場合がありますか?たとえば、プロスポーツ選手を考えてみてください...彼のスポーツタイプは、サッカー、ホッケー、野球、バスケットボールなどです。文字列とエナム、皆さんはどう思いますか?
2 に答える
コードで列挙型を使用する必要があります-強い型付けは多くの間違いを避けるのに役立ちます-そしてそれらを文字列または数値に変換して保存します。
文字列は、かなり多くのストレージ スペースを必要とします。"バスケットボール" は、エンコーディングに応じて 10 ~ 20 バイトであり、4 として保存する場合は 1 バイトしか必要ありません。ただし、これが実際に問題になるケースはほとんどありません。100 万件のレコードがある場合でも、合計データベース サイズの差は 20MB 未満です。文字列は操作が簡単で、列挙が変更された場合に暗黙のうちに失敗する可能性が低いため、文字列を使用してください。
文字列は、ロード時の列挙型への変換など、ほとんどの操作で数値よりも遅くなります。ただし、違いは、データベースから何かを取得するのにかかる時間よりも桁違いに小さいため、問題にはなりません。
String
移植性の観点から優れています。また、人気のある DBMSやその他の多くの DBMS ではサポートされEnum
ていません。MSSQL Server
アプリケーション レベルのロジックを使用して、配列に対する有効な入力を防止し、文字列として格納することができます。
編集:
私の好みはString
、CakePHP
(私がWebアプリケーションを行う場所Enum
)移植性の問題をサポートしなくなりました。