0

ドロー番号 (1 ~ 60) を固定値と固定順序で保存します。

1 つの抽選には 4 つの数字があり、別の抽選に
は 6 つの数字が
あり、別の抽選には 2 つの数字があります

私の考えは、各描画タイプを個別の SQL テーブルに分離することでした。問題は、区切り記号で区切られた単一の列に数値を格納するのが最適かということです....

ID(int) | numbers(varchar)

または、代わりに各数値を別々の列に保存しますか?

ID(int) | num1(tinyint) | num2(tinyint) | num3(tinyint) | num4(tinyint)

保存されている番号を検索する必要はありません。

4

3 に答える 3

1

それらを個別に検索したり、個別に取得したりする必要がない場合、それらはデータベースの観点から見ると 1 つの不透明な「ブロブ」にすぎず、単一のフィールドに格納することで原子性の原則と 1NFに違反することはありません。.

しかし、今がそうだからといって、将来も変わらないというわけではありません。したがって、少なくとも 2 番目のオプションを使用してください。また、これにより、DBMSはドメインの整合性を強制し、これらが実際に数値であり、文字列であることを確認できます。

ただし、データの将来性を保証するために、さらに進んで次の構造を使用します。

ここに画像の説明を入力

数値を均一な方法で処理し、多くの NULL を回避することに加えて、最大値を簡単に変更することもできます。それが必要になった場合の数。この構造では、クエリも簡単になると思います。

ところで、(other fields)数字がなく、少なくとも 1 つの数字がなければ引き分けが存在しない場合は、DRAW テーブルを完全に省略して、DRAW_NUMBER を使用するだけです。

于 2012-06-11T15:59:45.647 に答える
1

個別の列 (データベースの正規化)

于 2012-06-11T10:46:50.557 に答える
1

数字を検索する必要がない場合 (つまり、特定の数字を持つドローを見つける)、同じフィールドに数字を保存します。

明確化

彼は自分で言った、彼はデータを保存しているだけで、それに対して何らかの操作を行う必要はありません。そのデータが何であるかは問題ではありません。たまたま 2 から 6 の数字の間ですが、それは無関係です。何らかの理由で必要でない限り、それらを別々の列に入れる理由はありません。

私がすることは、id、draw_type、numbers の 3 つの列を持つ 1 つのテーブルのみを使用することです。

それぞれ 3 ~ 7 列の 3 つの異なるテーブルを使用するよりも、作業がはるかに簡単です。

于 2012-06-11T10:48:46.757 に答える