1

在我的项目中,我有一个包含职位发布信息的职位表。每个工作都可以定位到(此信息存储在 JobLocations 中)

  1. 只有一个国家,全国范围例如:(id = 1, idCountry = US, idRegion = null, idCity = null, idJob=3)
  2. 只有一个区域,区域范围广例如:(id = 2, idCountry = US, idRegion = TX, idCity=null, idJob=5)
  3. 或者更具体一点,可以指当前国家->地区的多个城市
    (id = 3, idCountry = US, idRegion = TX, idCity=78, idJob=7)
    (id = 4, idCountry = US, idRegion = TX, idCity=200,idJob=7)

我创建的一些表就是这些。 工作地点 http://imageshack.us/a/img267/5530/joblocations.png 但我可以在表 JobLocations 中看到传递依赖的问题,例如更改 idCountry 将导致更改 idRegion 或 idCity。

我还有哪些其他选项可以删除传递依赖项并实现上述第 1、2、3 点?

4

1 回答 1

0

解决这个问题的一种方法是在每个地区设立两个“特殊”城市,一个表示“该地区的任何地方”,一个表示“全国的任何地方”。然后,城市代码JobLocations用于指示工作的区域性(如果您愿意的话)。

为了区分特殊城市,您可以以某种方式对它们进行编码(例如,负 id),或者更准确地说,向City您通过连接查找的类型列添加一个类型列。

设置好特殊城市后,您可以从 中删除 region 和 country FK 列JobLocations

顺便说一句,如果我是你,我会从 Country、Region 和 City 中删除 id 列。它们是无用的开销,并且通过允许重复名称来引发错误。 JobLocations也不需要身份证;它将只有 JobID 和 City 作为列,并且它的主键包括它们两者。

两个国家都不能有工作的规则很难执行。您需要一个大致说明的触发器count(city) < 2 where type in ('country','region')。它比这更复杂,但你描述的规则都可以表达为一个SELECT语句。

于 2013-03-14T05:46:14.550 回答