2017-08-08 55 views
0

我有一个Crops表,每行对应一个Crop。在SQL表中创建映射到其他表的主键的列

在一个单独的表中,位置,我有每一行对应一个位置。我想在每个位置存储作物中每种作物的频率,等等。每个作物和每个地点的频率明显不同。 我将如何构建位置表?我做了一些阅读,并认为外键可能会有用,但我不太明白。我是SQL新手。

我基本上试图做的是将数据列表存储在我的位置表中。有什么办法让位置的列与作物的主键相对应吗?更新庄稼时更新位置的解决方案也很棒。

+0

像Barmar说,你应该建立一个多对一对多的关系,要做到这一点,你需要一个结合表,喜欢它这里解释:https://support.airtable.com/hc/en-us/articles/218734758-A-beginner-s-guide-to-many-to-many-relationships –

回答

2

需要有单独的许多一对多表:

CREATE TABLE CropLocations (
    crop_id INT NOT NULL, 
    location_id INT NOT NULL, 
    frequency INT, 
    PRIMARY KEY (crop_id, location_id), 
    CONSTRAINT FOREIGN KEY (crop_id) REFERENCES Crops (id), 
    CONSTRAINT FOREIGN KEY (location_id) REFERENCES Locations (id) 
);