1

いろいろな施設のデータを保存したいです。その施設が国内にあることを可能にするデータを保存したいと思います。

そのため、各施設の町のデータ、郡のデータ、国のデータを保存する必要があります。

町、郡、国のデータベースがそれぞれリンクされているので、たとえば町を検索できます。その「county_id」列は、郡テーブルの郡のIDと一致します。

実際の施設表からこのデータを参照する最良の方法を考えていました。

この表の現時点では、それぞれのデータを含む町、郡、国の列があります。

私のURL構造はwebsite.com/country/county/town/nameなので、このようなデータがあると、1つのクエリで施設を見つけることができ、結合などはありません。

町IDを持つ列を1つだけにして、郡/国のデータを見つけるために毎回結合でクエリを実行することの利点は何ですか?明らかに1つの利点は、データが変更された場合、それ自体が自動的に更新されることです。もう1つは、必要なデータベースストレージスペースが少ないことだと思います。

ただし、一方で、より多くのクエリが必要になります。

何かご意見は?

ありがとう

4

2 に答える 2

2

さて、あなたはその発言にかなり注目しています。非正規化は一般に読み取りパフォーマンスに役立ち、書き込みパフォーマンスには悪影響を及ぼしますが、正規化は一般に反対のことを行います。

通常、特定のデータでは、書き込みよりも多くの読み取りを行います。その場合は、データをそのままにしておきます (各施設エントリに重複する町、郡などがあります)。更新は遅くなります (コードが増え、検証が増え、更新の送信と実行に時間がかかります) が、読み取りははるかに高速になります (クエリ コードが単純になり、クエリの実行にデータベース側で費やす時間が短縮されるなど)。私は最近、データが月に 1 回更新されるプロジェクトに取り組んでいましたが、1 日に何度も (Web アプリに表示されて) 読み取られたため、正規化されたデータベースと多くの結合 (疑似または実際) から最終的に脱却しました。 、ここにあるものと同様のデータの複製になり、Web アプリの読み取りパフォーマンスと応答性が大幅に向上しました。

ああ、データベーススペース(ディスク上で占有されている物理スペースなど)に関しては、テーブルを正規化するとスペースが(場合によっては大幅に)減少することは理論的には真実ですが、これは実際には読み取りおよび/または書き込み速度に大きな影響を与えません、したがって、パフォーマンスのみを追求する場合 (およびディスク容量を気にしない場合) は、この引数を考慮しないほうがよいでしょう。

于 2012-10-05T11:57:38.310 に答える
0

あなたの場合、データベーススペースの節約はありませんが、変更を非常に簡単に維持できます。町は郡や国を変えないので購入してください。あなたのデータベースはそのように安全です!

この場合、それを分割すると、ストレージとパフォーマンスのコストが発生します。追加のデータが必要ない場合は、分割しないでください。

于 2012-10-05T11:55:25.423 に答える