协会最佳模式

时间:2011-11-18 13:58:51

标签: sql jpa-2.0

我对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映射表格。

感谢。

1 个答案:

答案 0 :(得分:1)

虽然第二种解决方案足够且空间效率稍高,但我推荐第一种解决方案,原因如下:

  • 如果您希望将来扩展表设计,例如在fromdate表中添加todateperson_live-country cloumns,则第二个解决方案中的composit主键将不再有效。同一个人一生中不止一次可以住在同一个国家。
  • 如果您需要将另一个表中的person_live-country表作为外键引用,那么fisrt解决方案就更容易了。