0

项目连接到:
一个或多个“区域”和/或
一个或多个“县”和/或
一个或多个“城市”和/或
一个或多个“地方”。


我的问题是我应该如何建立关系:

id | thingID | regionId | countyId | cityId | placeId

或者

4 tables?

id | thingId | regionId

id | thingId | countyId

id | thingId | cityId

id | thingId | placeId

还是有其他更好的解决方案?

4

2 回答 2

1

第二种选择显然更好。这些类别中的每一个都是多对多的关系,这就是第二个选项所描述的内容。

第一个选项会导致一些非常奇怪的数据。如果您有一个与所有不同类型关联一次的 ThingId,那么您将拥有一个填充了所有列的行。然后,如果您的 ThingId 需要与另一个城市相关联,那么您将拥有另一行只有填写了cityId,其他列保持为空。

导致大量空值的表设计通常(并非总是)表明您的模型存在缺陷。

于 2012-06-23T11:57:02.310 回答
1

我可能想多了,但我认为“地区”、“县”、“城市”和“地方”之间可能存在关系——属于“地方”的项目也应该属于城市、县和地区。

您可以在您提供的两种设计中解决这个问题 - 但您需要大量额外的逻辑。在第一个解决方案中,您需要确保每次插入记录时,都从“左到右”填充位置 - 只有“位置”的记录是无效的。

在第二个解决方案中,您需要填充所有相关行——Chelsea 中的项目还必须具有伦敦、米德尔塞克斯和英格兰东南部的记录。

还有另一种方式...

Table: location
ID     Name                 Parent
------------------------
1     South East England    null
2     Middlesex             1
3     London                2
4     Chelsea               3
5     Kent                  1
6     Canterbury            5


Table: item
Id     name
-----------------
1      Posh Boy
2      Cricket ground
3      Rain

Table: item_location
ItemID    LocationID
--------------------
1        4    //Posh boy in Chelsea
2        2    // Cricket ground in Middlesex
3        1    // Rain in the South East of England.
于 2012-06-23T11:58:44.663 回答