1

ユーザーがいくつかの多肢選択式の回答を送信する必要があるオンラインフォームがあり、メールアドレスを挿入するオプションがあります (結果を最新に保つため)。しかし、実際にこれを実行できる人はごくわずかです。

submission_id INTしたがって、現在、 、encoded_answers varchar(20)、およびの 3 つの列を持つテーブルがありemail VARCHAR(50)ます。ただし、電子メール エントリの 95% が NULL であることを考えると、これは非常に無駄です。

もちろん、2 つのテーブルを使用することもできます。大きなテーブルにはsubmission_idencoded_answersがあり、小さなテーブルには と がsubmission_idありemailます。しかし、1つのテーブル内に解決策もありますか? フィールドがNULLでない場合にのみスペースを取るスパースタイプの列の並べ替え?

4

2 に答える 2

6

なぜ無駄なのですか?これを確認するためのテストを行いましたか? 値のない列は、実際には多くのスペースを占有しません。おそらく、1 行あたり 1 列あたり 1 バイトです。それVARCHARが可変長であることです。

さらに、フィールドを短い長さに恣意的に制限することは、実際には有害であると見なされます。メールアドレスが 50 文字を超えることは珍しくありません。と のストレージ要件は、同じ長さの文字列に対して同じであることに注意してVARCHAR(50)くださいVARCHAR(255)。長さが 256 以上の列の場合のみ、追加の長さのバイトの形式で支払う必要があります。

データがフィールドに収まらない場合、MySQL は任意にデータを切り捨てることに注意してください。これは、メールアドレスなどの重要なデータにとっては非常に悪いことです。

于 2013-07-10T20:10:37.570 に答える
0

SQLではありません。このようなタスクにはNoSQLエンジンの使用を検討する必要があります。

于 2013-07-10T20:10:03.440 に答える