关于多个表的关联(数据库)

时间:2012-04-24 16:07:31

标签: mysql database database-design relational-database database-schema

我想将数据库中的城市,州或国家/地区和项目关联起来。但是,我想在'items'表中只有一个字段来链接到它所关联的城市,州或国家(而不是有三个条目'city_id','state_id'和'COUNTRY_ID')。见图:

我知道有一个把桌子放在两者之间的技巧,但是我搜索了但仍然没有找到那种模式。

非常感谢!

Ĵ

Database modeling

3 个答案:

答案 0 :(得分:1)

正如您所说,您可以使用中间表:

CREATE TABLE regions (
region_id  INT NOT NULL AUTO_INCREMENT,
country_id INT NOT NULL,
state_id   INT,
city_id    INT,
PRIMARY KEY (region_id),
UNIQUE  KEY (country_id, state_id, city_id)
CONSTRAINT FOREIGN KEY (country_id)           REFERENCES countries (id),
CONSTRAINT FOREIGN KEY (country_id, state_id) REFERENCES states (country_id, id),
CONSTRAINT FOREIGN KEY (  state_id,  city_id) REFERENCES cities (  state_id, id)
)

您需要将此regions表格更新为每个可能的(国家,州,城市)组合,包括州或城市NULL的位置。

答案 1 :(得分:1)

您是否考虑过添加第五个表:place。每个countrystatecity都是place。每个item都与place相关联。

这仍未正常化。您必须确保三个表中的place值集不相交。您还需要做更多工作才能将item加入相应的表格。 (基本上,你为另一个人交换了一套困难。)

答案 2 :(得分:0)

这是另一个想法,告诉我你的想法。

由于“项目”中的字段是可选的,因此国家,州和国家之间的关系是可选的。城市已经定义,也许我可以尝试这样:

各国,各州及各州的主要关键通过所有这三个表格,城市将是唯一的ID(例如:没有州名称ID将与任何城市或国家/地区条目具有相同的主键)。

然后我可以将这个唯一的ID放在“items”表中以及“type”中,这样​​可以让表格在哪里查找('cities','states','countries')。

由于可能会有一些变化(例如:'region','continents'等),那么可能最好简单地“添加”一个新表并输入而不是重新生成关联表。

有意义吗?

谢谢!