私はデータベースに非常に慣れていないので、簡単な質問があります。
次のフィールドがある場合、MySQLデータベースをどのように設計しますか?
ID、緯度、経度、日付-複数の日付、時刻-複数回
私はそれを2つのテーブルに入れるべきだと知っていますよね?そして、これら2つのテーブルはどのように見えますか?
ありがとう!
私はデータベースに非常に慣れていないので、簡単な質問があります。
次のフィールドがある場合、MySQLデータベースをどのように設計しますか?
ID、緯度、経度、日付-複数の日付、時刻-複数回
私はそれを2つのテーブルに入れるべきだと知っていますよね?そして、これら2つのテーブルはどのように見えますか?
ありがとう!
最初のテーブルは「場所」と呼ばれ、主キーとして「id」列があり、「緯度」と「経度」という 2 つの列があります (アプリケーションの要件に応じて、varchar または数値型になる可能性があります)。 )。2 番目のテーブルは「location_event」と呼ばれ、「id」列を主キーとして、「location」テーブルの主キーへの参照である「location_id」と呼ばれる外部キー列を持つことができます。この "location_event" テーブルには、"date" 列と "time" 列 (それぞれ日付と時刻の型) もあります。
簡潔な説明から何をしようとしているのかを伝えるのは難しいですが、第 3 正規形では、どの列も依存する必要があることを示しています。
そのために、私の最初の分析では次のものが生成されると思います。
Location
LocId primary key
Lat
Long
Events
LocId foreign key Location(LocId)
Date
Time
これは、ゼロ以上のイベントが発生する可能性のある場所を保存するという私の (おそらく欠陥のある) 分析に基づいています。
イベントを別のテーブルに配置することをお勧めします。別の方法として、列の配列を使用することは決して良い考えではありません。
私が推測できる限り、日付と時刻は常にカップルが一緒に出演しています. その場合、場所と時間の 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;
さて、議論のために、経度と緯度について話しているとしましょう。これらは、経度と緯度のある種のリスト (おそらく海の丸太ですか?ああ、私の仲間です! ) のエントリです。そして、これらの経度/緯度のペアはそれぞれ、リストに複数回表示される場合があります。
おそらく、それぞれの経度/緯度のペアが何回出現し、それぞれの出現がいつ発生したかを把握するデータベースを構築したいとお考えですか?
では、これはどうですか: まず、経度/緯度のペアのテーブルを用意し、それぞれに 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
それが役立つことを願っています! 認めざるを得ないのは、人々が何を意味しているのかを推測しようとするのは本当に面倒なことです.何が必要。
幸運を!