2009-04-20 17 views
0

私はデータベースにはとても新しく、簡単な質問があります。私はそれを置く必要があります知っている複数回シンプルなMySQLデータベースの質問

- 複数の日付、 時間 -

ID、 緯度、 長く、 日付:どのように私はこれらのフィールドを持っている場合、私は私のMySQLデータベースを設計します

2つのテーブルに、右か?そして、その2つのテーブルはどのように見えますか?

ありがとうございます!

+3

外部キー制約を追加することができます。 –

答えて

4

最初のテーブルは "location"と呼ばれることがあり、 "緯度"と "longditude"という2つの列( "varchar"または "numeric"あなたのアプリケーションが必要とするもの)。 2番目のテーブルは "location_event"と呼ばれ、 "location"テーブルの主キーへの参照である "location_id"という外部キー列とともに、主キーとして "id"カラムを持つことができます。この「location_event」テーブルには、「日付」列と「時刻」列(それぞれ日付と時刻の種類)があります。

0

OK、引数のために、あなたは経度と緯度について話しているとしましょう。これらは経度と緯度のリスト(おそらく海ログ?Arrgh、私のmaties!)のエントリのエントリです。そして、これらのロング/ラットのペアのそれぞれは、リスト内に複数回現れることがあります。

おそらく、各ロング/ラットペアの出現回数と各出現状況を把握するデータベースを構築したいのですか?

これはどういうものですか:最初にlong/latペアの表があり、それぞれにIDを付けます。

ID long lat 
-- ----- ----- 
1 11111 22222 
2 33333 44444 
3 55555 66666 

次に、我々は長い/緯度ペア日付/時刻の各外観を割り当てるなる、別のテーブルを持っています:

ID date  time 
-- ----  ----- 
1 1/1/1900 12:30 
1 2/2/1900 12:31 
1 3/2/1900 12:30 
2 1/1/1930 08:21 

のは、あなたが最初のテーブルを呼ぶだろうとしましょう "longlat 2番目の数字は「appearances」です。

あなたは次のように何かをすることによって、単一の長い/緯度ペアのすべての外観を見つけることができる:

SELECT count(ID) FROM appearances 
    LEFT JOIN longlat ON appearances.ID=longlat.ID 
    WHERE longlat.long = 11111 
を:あなたが何かを行うことによって、11111の経度で起こった回数を数えることができる

SELECT date,time FROM appearances 
    LEFT JOIN longlat ON appearances.ID=longlat.ID 
    WHERE longlat.long = 11111 AND longlat.lat = 22222 

希望に役立ちます!私は認めなければなりません、人々が何を意味するかを推測しようとするのは本当に面倒です...将来的に自分自身をより明確にすることを試みれば、あなたが得られる助けはもっと便利で簡潔になりますあなたが必要なもの。

幸運を祈る!

3

それはあなたが簡潔な記述から何をしようとして伝えるのは難しいですが、第3正規形は、任意の列が依存であるべきことを指示:

  • キー。
  • 全体のキー。
  • キー以外何もありません。

そのために、私は私の最初の分析が生成されますと言うだろう:

Location 
    LocId primary key 
    Lat 
    Long 
Events 
    LocId foreign key Location(LocId) 
    Date 
    Time 

これはあなたがでゼロ以上のイベントの場所を保存したい私の(おそらく欠陥)分析に基づいています発生する可能性があります。

イベントは別のテーブルに入れることをお勧めします。これは決して良い考えではない列の配列を持つことです。

+0

+1こちらも。 ;) –

1

私は日時を推測できる限り、カップルは常に一緒に出現しています。その場合、私は2つのテーブル、場所と時間を提案します。

CREATE TABLE location (
    id INT NOT NULL, 
    lat FLOAT NOT NULL, 
    long FLOAT NOT NULL, 
    PRIMARY KEY (id) 
) 


CREATE TABLE time (
    id INT NOT NULL, 
    locationid INT NOT NULL, 
    date DATE NOT NULL, 
    time DATE NOT NULL 
) 

オプションで、あなたは私たちが最高の構造の方にご案内するためには、これらのフィールド間の関係を説明する必要があるとしている

ALTER TABLE time ADD CONSTRAINT location_fk_constraint FOREIGN KEY location_fk_constraint (locationid) 
    REFERENCES location (id) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE;