我有需要转换成表格的数据。这些数据包括主要涉及荷兰王国和其他一些国家的数据。这有一些陷阱:
荷兰王国由四个国家(一个是荷兰)和三个特殊城市组成,属于荷兰,但不属于荷兰本身。
荷兰有省份,省份有市镇,市镇有住所。
三个特殊城市不属于任何省份,它们直接属于荷兰。
在我们得到的数据中,荷兰王国内的三个国家就是这样;数据显示“国家”和“居住”下的国家
然后是其他国家的荷兰人问题。对于这些国家,我们不关心他们是否有省/市/等。我们只是从国家的角度来看待它。
为了更好地了解,我们得到的数据看起来像这样:
Bonaire实际上应该是国家:荷兰,市政府:Bonaire(也许住所:Bonaire,不确定它是否有助于查询)
我最初想过如何把它放在表格中如下:
Residences表还有一个CountryId的原因是因为像墨西哥这样的国家,我们不想知道/显示市政当局,但我们知道并希望展示住所。
这种方法存在的一个问题是,如墨西哥这样的国家,Residences表中的Municipalities列必须包含空值。
另一个问题是,对于荷兰王国的一个国家(荷兰除外),国家和居住地都填写了该国的名称。我不知道把这个国家的名字放在住宅表中是否明智。
答案 0 :(得分:0)
具有这些要求的数据库设计的一个解决方案可能是: 1)具有记录的地理对象类型(可以是分层的)的字典表(id,Name):
{id = 1, Name = Province},
{id = 2, Name = Municipality},
{id = 3, Name = City}
等
2)具有FK到自身的表(id,GeoTypeId,ParentId,CountryId,Name)(ParentId - > Id),其存储对象的链接层次结构。记录将是:
{id = 1, GeoTypeId = 1, ParentId = null, CountryId = ..., Name = Zuid-Holland},
{id = 2, GeoTypeId = 2, ParentId = 1, CountryId = ..., Name = Rotterdam}
。
对墨西哥而言,记录为
{id = n, GeoTypeId = 3, ParentId = null, CountryId = ..., Name = Morelia}
这对于编辑层次结构非常灵活,但您需要额外的努力来选择记录(这是标准化的代价)。您还可以在新国家/地区需要时轻松添加其他GeoType记录,而无需更改架构。