1

我正在为具有少量共享数据的垂直层次结构中的多个表寻找最佳实践。假设三个表:

Country {
   id 
}

State {
   id,
   country_id,
   FK_to_country_id,
}

City {
   id,
   state_id,
   FK_to_state_id,
}

在上述状态属于国家,而城市属于国家,结果也属于国家。该模式看起来很干净,但是当您想查找一个城市属于哪个国家/地区时,您必须使用包含三个表的 JOIN。如果有另一个属于城市的称为县的层级,情况会变得更糟。

City {
   id,
   country_id,
   state_id,
   FK_to_country_id,
   FK_to_state_id,
}

在 City 中添加另一列 'country_id' 可以让我们从繁琐的 JOIN 中解放出来,但数据库模式会有些重复。

现实世界的实践是什么?

4

1 回答 1

1

这就是JOINs 的用途;不要剥夺他们的职责。

在现实世界的实践中,像这样连接多个表是绝对正常的。

在您的示例中,是的,在城市表中包含国家/地区 ID 是多余的。

但情况并非总是如此。考虑一个例子,一个城市可以存在而不需要在一个州(许多第三世界国家没有“州”名称),那么你必须有那个外键国家 ID,因为该State表是可选的。

于 2012-05-23T00:45:08.200 回答