0

これは、従業員ごとに複数の電話番号を保存する必要があるインタビューで尋ねられました。私は、コンマで区切られた数字の文字列を使用できると答えました。次の質問は、文字列のサイズが非常に長くなった場合 (仮に 1000 個の数字を仮定すると) はどうなるかということでした。より良い解決策を考え出してください。私は無知でした。誰かがこの問題を解決するための正しいアプローチを提案できますか..

編集:列の数をいくつかの最大数として固定し、必要に応じて aas を挿入することを提案しましたが、ほとんどの場合、多くの NULL 値につながるため、それは悪い設計でした。

編集:以下のコメントの1つで提案されているように、新しいテーブルを追加する以外に、この問題を解決する他の方法が存在するかどうかを知りたかっただけです(回答として伝えました)。ところで、これはインタビュアー側のトリックですか、それとも別の解決策が実際に存在しますか?

4

3 に答える 3

5

単純な 1:n-Relation はどうですか? 次のように、電話番号用に別のテーブルを作成します。

Phone_Numbers(id, employee_id, phone_number_type, phone_number)

このようにして、各従業員に何千もの電話番号を追加しても問題はありません.

一般的に: コンマ区切りで何かをデータベース フィールドに格納することは決して良い考えではありません。Database Normalizationを読んでください。通常、3NF は適切な妥協案です。

于 2012-07-22T08:23:26.353 に答える
1

ここで、電話番号は多値属性です。コンマ区切りの値を使用し、意味をなすために複数値の属性に上限と下限を設定することもできますが、インタビュアーが 1000 の数値エントリを要求したため、テーブルに原子性を提供し、電話ごとに新しい行を作成することをお勧めします。番号。これにより、行数が増加します。その後、正規化を実行できます。これは多値依存のケースであるため、この問題を解決するには 4NF まで行かなければなりません。

于 2012-11-30T06:52:50.290 に答える
-1

長い文字列をDBに格納したいとおっしゃいましたが、DBをリレーショナルDBにすることはできず、代わりにnosqldbにすることができます。文字列が非常に長い場合は、各数値を完全に格納するのではなく、各数値の差を格納することを選択できます。この方法でディスク容量を節約できると思います。例えば。12345、12346、12347、12358を保存する場合は、12345、1、2、3を保存できます。

于 2012-07-22T09:21:03.810 に答える