0

私はデータベースに非常に慣れていないので、簡単な質問があります。

次のフィールドがある場合、MySQLデータベースをどのように設計しますか?

ID、緯度、経度、日付-複数の日付、時刻-複数回

私はそれを2つのテーブルに入れるべきだと知っていますよね?そして、これら2つのテーブルはどのように見えますか?

ありがとう!

4

4 に答える 4

4

最初のテーブルは「場所」と呼ばれ、主キーとして「id」列があり、「緯度」と「経度」という 2 つの列があります (アプリケーションの要件に応じて、varchar または数値型になる可能性があります)。 )。2 番目のテーブルは「location_event」と呼ばれ、「id」列を主キーとして、「location」テーブルの主キーへの参照である「location_id」と呼ばれる外部キー列を持つことができます。この "location_event" テーブルには、"date" 列と "time" 列 (それぞれ日付と時刻の型) もあります。

于 2009-04-20T06:09:31.873 に答える
3

簡潔な説明から何をしようとしているのかを伝えるのは難しいですが、第 3 正規形では、どの列も依存する必要があることを示しています。

  • キー。
  • キー全体。
  • 鍵に他なりません。

そのために、私の最初の分析では次のものが生成されると思います。

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

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

イベントを別のテーブルに配置することをお勧めします。別の方法として、列の配列を使用することは決して良い考えではありません。

于 2009-04-20T06:24:22.850 に答える
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;
于 2009-04-20T07:13:09.223 に答える
0

さて、議論のために、経度と緯度について話しているとしましょう。これらは、経度と緯度のある種のリスト (おそらく海の丸太ですか?ああ、私の仲間です! ) のエントリです。そして、これらの経度/緯度のペアはそれぞれ、リストに複数回表示される場合があります。

おそらく、それぞれの経度/緯度のペアが何回出現し、それぞれの出現がいつ発生したかを把握するデータベースを構築したいとお考えですか?

では、これはどうですか: まず、経度/緯度のペアのテーブルを用意し、それぞれに 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 date,time FROM appearances 
   LEFT JOIN longlat ON appearances.ID=longlat.ID 
   WHERE longlat.long = 11111 AND longlat.lat = 22222

次のようにして、経度 11111 で何かが起こった回数を数えることができます。

SELECT count(ID) FROM appearances 
   LEFT JOIN longlat ON appearances.ID=longlat.ID 
   WHERE longlat.long = 11111

それが役立つことを願っています! 認めざるを得ないのは、人々が何を意味しているのかを推測しようとするのは本当に面倒なことです.何が必要。

幸運を!

于 2009-04-20T06:19:16.467 に答える