0

アイテムは、
1 つまたは複数の「地域」および/または
1 つまたは複数の「郡」および/または
1 つまたは複数の「市」および/または
1 つまたは複数の「場所」に接続されています。


私の質問は、関係をどのように設定する必要があるかです:

id | thingID | regionId | countyId | cityId | placeId

また

4 tables?

id | thingId | regionId

id | thingId | countyId

id | thingId | cityId

id | thingId | placeId

または、おそらく別のより良い解決策がありますか?

4

2 に答える 2

1

2 番目のオプションの方が明らかに優れています。これは、これらの各カテゴリの多対多の関係であり、それが 2 番目のオプションで説明されています。

最初のオプションでは、非常に奇妙なデータが得られます。一度すべての異なるタイプに関連付けられた ThingId がある場合、すべての列が入力された 1 つの行が作成されます。ThingId を追加の都市に関連付ける必要がある場合は、別の行が作成されます。 cityId が入力され、他の列は null のままです。

多くの null 値になるテーブル設計は、通常 (常にではありません)、モデルに欠陥があることを示しています。

于 2012-06-23T11:57:02.310 に答える
1

考えすぎかもしれませんが、おそらく「地域」、「郡」、「都市」、「場所」の間に関係があると思います。「場所」に属する項目は、市、郡、地域にも属している必要があります。

提供する両方の設計でこれを解決できますが、かなりの量の追加ロジックが必要です。最初の解決策では、レコードを挿入するたびに、場所を「左から右」に入力する必要があります。「場所」のみのレコードは無効です。

2 番目のソリューションでは、関連するすべての行に入力する必要があります。チェルシーのアイテムには、ロンドン、ミドルセックス、およびサウス イースト イングランドのレコードも必要です。

別の方法があります...

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 に答える