简单的MySQL数据库问题

时间:2009-04-20 05:46:31

标签: mysql database normalization

我对数据库很新,我有一个简单的问题。

如果我有这些字段,我将如何设计我的MySQL数据库:

ID, LAT, 长, 日期 - 多个日期, 时间 - 多次

我知道我应该把它分成两个表,对吗?那两张桌子看起来怎么样?

谢谢!

4 个答案:

答案 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

希望有所帮助!我必须承认,尝试猜测人们的意思真的很烦人...尝试让自己在未来变得更加清晰,你会发现你获得的帮助会更有用,更简洁,更有针对性你需要什么。

祝你好运!