2

私はExcel形式で提供されたデータから非常に単純なデータベーステーブルを作成しており、4つの列を使用します。

日付/時刻IPアドレスホスト名脆弱性が特定されました

私は通常、1日に1枚のExcelシートを受け取り、1000〜3000行の範囲で処理します。日付/時刻フィールドはYYYYMMDDHHMMで構成され、何度も複製できますが、同じ日付/時刻列ごとに一意のIPアドレスが必要です(例:2012-08-26:16:01、80.3.3.255、2012-08)。 -26:16:01、192.168.0.1。いくつかの同様の質問を確認した後、レコードごとに一意の主キーを生成するか、日付/時刻とIP列を結合して主キーを作成する方が効率的ですか?

4

3 に答える 3

1

これは、少なくとも2つの角度に依存します。

  • 後で選択するために使用されるWHERE基準について:タイムスタンプとIPで個別に選択する場合は、それらに一意でないキーを作成し、AUTO_INCREMENT各行に単純な(おそらく)プライマリキーを作成することをお勧めします。
  • タイムスタンプ/IPが重複している場合の対処方法:一意のキーまたは主キーはこれを除外しますが、別のキーは問題なく共存します。それはあなたのアプリの要件に依存します、あなたがどちらを好むか。
于 2012-10-20T23:22:31.323 に答える
0

ほとんど/すべてのテーブルにID列があるのが好きなので、そのようにします。「メモ」のようなものでアプリケーションを拡張することを想像してみてください。IDなしでこれらをこのテーブルにどのように結合しますか?

また、自動ローダーがおかしくなるケースがいくつかあります。IDは、不良行を特定するのに役立つ方法です。

@Eugenが指摘したように、タイムスタンプ/IPで複合一意インデックスを作成するだけです。

于 2012-10-21T00:36:45.377 に答える
0

データベースを扱った私の経験では、日付は主キーのフィールドを非常に貧弱にします。私がそれらに遭遇するたびに、アプリケーションがどのようにプログラムされていても、日付であなたを噛む何かが常にありました。ほとんどの場合、「日付を誤って入力したので、変更したいのですが、12個の子テーブルを更新しないとできません」または「日付を修正してソフトウェアが再送信したため、データベースがデータを複製しただけです。レポートし、それが重複していることを示す方法はありません。」

さらに、日付が実際に一意であるとは限らないことを覚えておく必要があります。簡単な例として、夏時間のために時計を戻すとどうなりますか?突然、午前1時が2回発生する日付があります。これは、日付が2つのインスタンスで衝突する可能性があるという正当な状況がすでに発生していることを意味します。ソリューションによっては、タイムゾーンが使用されていること、またはUTCが指定されていることを確認する必要がある場合があります。UNIXタイムスタンプを使用してこの問題を回避することもできますが、それでも、時間を正しく追跡して現実に同意するために、2つの異なる無関係のコンピューターシステムに依存しています。

同様に、IPアドレスはグローバルに一意である必要はありません。プライベートIPアドレッシングとNATは、2つのシステムが同じIPアドレスを持つシナリオを簡単に構築できます。実際、関係するすべてのシステムのシステム管理者でない限り、ホスト名、IPアドレス、MACアドレス、さらにはBIOSシリアル番号を確実に使用して、一意の値が保証されることを期待することはできません。これが、システムBIOSがシステムのGUIDを持っていることが多い理由です(ただし、再生されたシステムボードのGUIDがすべてゼロになる場合があるので、これも確実ではありません)。

これらの両方のフィールドの複合キーを使用することを選択した場合、両方の世界で最悪の事態が発生する可能性があります。

あなたが非常に小さなシステムで作業していることを理解しており、これらの問題が発生する可能性は低いですが、システムアナリストとして、特にデータが複数の独立したソースから来ています。

于 2012-10-21T01:08:24.600 に答える