我对sql关系概念有疑问。我有一个简单的例子。 一个表人,国家和我想记录人们居住的历史。
CREATE TABLE person
(
person_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT
);
CREATE TABLE country
(
country_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT
);
第一个解决方案:
create table person_live_country
(
plc_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
person_id INT UNSIGNED NOT NULL,
country_id INT UNSIGNED NOT NULL,
FOREIGN KEY (person_id) REFERENCES person (person_id),
FOREIGN KEY (country_id) REFERENCES country (country_id)
);
第二个解决方案:
create table person_live_country
(
person_id INT UNSIGNED NOT NULL,
country_id INT UNSIGNED NOT NULL,
PRIMARY KEY (person_id, country_id),
FOREIGN KEY (person_id) REFERENCES person (person_id),
FOREIGN KEY (country_id) REFERENCES country (country_id)
);
最佳模式是什么:概念,性能,便利性? 将来我想用JPA映射表格。
感谢。
答案 0 :(得分:1)
虽然第二种解决方案足够且空间效率稍高,但我推荐第一种解决方案,原因如下:
fromdate
表中添加todate
和person_live-country
cloumns,则第二个解决方案中的composit主键将不再有效。同一个人一生中不止一次可以住在同一个国家。person_live-country
表作为外键引用,那么fisrt解决方案就更容易了。