我对数据库很新,我有一个简单的问题。
如果我有这些字段,我将如何设计我的MySQL数据库:
ID, LAT, 长, 日期 - 多个日期, 时间 - 多次
我知道我应该把它分成两个表,对吗?那两张桌子看起来怎么样?
谢谢!
答案 0 :(得分:4)
您的第一个表可能被称为“位置”,它将有一个“id”列作为其主键,以及两个名为“latitude”和“longditude”的列(可能是varchar或数字类型,具体取决于什么你的申请要求)。您的第二个表可能被称为“location_event”,它可能有一个“id”列作为其主键,以及一个名为“location_id”的外键列,它是对“location”表的主键的引用。这个“location_event”表还有一个“日期”列和一个“时间”列(分别是日期和时间类型)。
答案 1 :(得分:3)
很难从简洁的描述中分辨出你想要做什么,但第三种正常形式决定了任何一列应该依赖于:
为此,我要说我的初步分析会产生:
Location
LocId primary key
Lat
Long
Events
LocId foreign key Location(LocId)
Date
Time
这是基于我(可能有缺陷的)分析,您希望存储可能发生零个或多个事件的位置。
将事件放在一个单独的表中是一个好习惯,因为替代方法是使用列数组,这绝不是一个好主意。
答案 2 :(得分:1)
据我所知,日期和时间总是一起出现。在这种情况下,我会建议两个表,位置和时间。
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;
答案 3 :(得分:0)
好吧,让我们说,为了争论,你说的是经度和纬度。这些是经度和纬度的某种列表中的条目(也许是海洋日志? Arrgh,我很熟悉!)。并且这些长/纬度对中的每一个可能在列表中出现不止一次。
也许你想建立一个数据库来计算每个长/双对的外观数量,以及每次出现的次数?
那怎么回事:首先我们有一个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
”,第二个表格为“appearances
”。
您可以通过执行以下操作找到单个long / lat对的所有外观:
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
希望有所帮助!我必须承认,尝试猜测人们的意思真的很烦人...尝试让自己在未来变得更加清晰,你会发现你获得的帮助会更有用,更简洁,更有针对性你需要什么。
祝你好运!