建立N-M关系的问题

时间:2014-10-28 16:15:56

标签: mysql sql database

使用MySQL我正在尝试使用已经上传到数据库的数据建立1对多的关系。例如,假设我在一个表中有一个名称列表,我想将它们连接到已经存在的地方列表。显然,一个人可以去很多不同的地方,但是我遇到了这个问题。

        -----Name-----------ID---------
             John Smith     1
             Joe Random     2
             Seth Guy       3
        ------------------------------

我有另一张表如下:

        -------city---------ID---------
            New York        1
            Chicago         2 
            Orlando         3
            LA              4
        -------------------------------

我正在寻找类似的东西:

        --------Name--------City----------
             John Smith    Chicago
             John Smith    Orlando
             John Smith    New York
             Seth Guy      Chicago
             Joe Random    LA
      ------------------------------------

我很明显知道约翰史密斯去过所有3个地点,因为我上传的原始文件告诉了我,但我希望数据库建立连接并相应地放置他们。

2 个答案:

答案 0 :(得分:2)

如评论中所述,这是一种N-M关系,而不是1-N关系。你需要一个额外的"映射"表记录访问次数:

CREATE TABLE visits (
    person_id INT,
    city_id INT,
    CONSTRAINT visits_pk PRIMARY KEY (person_id, city_id)
);

然后,您可以使用几个联接查询所有访问:

SELECT person.name, city.name
FROM   person
JOIN   visits ON person.id = visits.person_id
JOIN   city ON visits.city_id = city.id

答案 1 :(得分:1)

引入一个保存关系的新表。

您的架构看起来像这样:

create table person (id, name)
create table city (id, name)
create table person_to_city (people_id, city_id)

在people_id和city_id上创建外键约束。