タグ付けされた質問 「denormalization」

1
複数の多対多の関係を持つビデオゲームビジネスドメイン用のデータベースの設計
私はデータベース設計が比較的新しいので、練習用に独自の仮想データベースを作成することにしました。ただし、多くの多対多(M:N)の関係があると考えているため、モデリングと正規化に問題があります。 一般的なシナリオの説明 このデータベースは、ゼルダシリーズで働いたさまざまな人々に関するデータを保持することを目的としています。私はのトラック維持したいコンソール(S)というゲームがで再生することができ、従業員に参加を持っていたゲーム開発をジョブズ従業員は、(多くの持っていた従業員が異なる上で働いていたジョブズ複数にわたるゲームなど、) ビジネスルール 複数の従業員が複数のゲームで作業できます。 同じコンソール上に複数のゲームを配置できます。 複数のコンソールを同じゲームのプラットフォームにすることができます。 複数の従業員が同じジョブを持つことができます。 アン従業員は複数持つことができますジョブを。 A ゲームは複数持つことができる従業員を。 ゲームは、複数の種類持つことができるジョブのそれの発展に 複数のゲームに同じタイプのジョブを添付できます。 A コンソールは複数持つことができます人々はそれに取り組んで。 A 人は複数で作業することができますコンソール。 属性名とサンプル値 FirstとLastに分割できる従業員名(「John」と「Doe」など) ゲームのタイトル(たとえば、「Ocarina of Time」) 役職(たとえば、「レベル設計」、「ディレクター」、「構成」、「レベル設計者」、「プログラマー」、「ローカリゼーション」など)。 コンソール名(「Game Boy Advance」など) 問題 これまでのところ、データの冗長性と、関心のあるエンティティタイプ間のM:N関係が至る所にあるように設計されているようです。しかし、データベース設計者は常にこの種の問題に遭遇しなければならないので、解決策が必要だと感じています。 注:テーブルを満たすデータを見つけることはできますが、問題は、正規化された形式のテーブルを持つデータベースにデータを整理することです。

6
個別の行としてではなく、1つの行の1つのフィールドに複数の値を格納することの利点
前回の毎週の会議中に、データベース管理のバックグラウンド経験がない人がこの質問を持ち出しました。 「データを複数行ではなくインライン(文字列)に保存することを正当化するシナリオはありますか?」 countryStates国の州を保存する場所と呼ばれるテーブルがあるとします。この例では米国を使用します。怠惰にするためにすべての国をリストすることはしません。 そこには2つの列があります。1つが呼び出さCountryれ、もう1つが呼び出されましたStates。ここで説明し、@ srutzkyの回答で提案されているように、これはISO 3166-1 alpha-3でPK定義されたコードになります。 テーブルは次のようになります。 +---------+-----------------------+-------------------------------------------------------+ | Country | States | StateName | +---------+-----------------------+-------------------------------------------------------+ | USA | AL, CA, FL,OH, NY, WY | Alabama, California, Florida, Ohio, New York, Wyoming | +---------+-----------------------+-------------------------------------------------------+ この同じ質問を友人の開発者に尋ねたところ、データトラフィックサイズの観点からは、これは役立つかもしれませんが、このデータを操作する必要がある場合はそうではないと述べました。この場合、リスト内のこの文字列を変換できるアプリケーションコードにインテリジェンスが必要です(このテーブルにアクセスできるソフトウェアがコンボボックスを作成する必要があるとしましょう)。 このモデルはあまり有用ではないと結論付けましたが、これを有効にする方法があるのではないかと疑いました。 私が聞きたいのは、実際に機能する方法で、このようなことをすでに見たり聞いたりしたりしていないかどうかです。

3
リレーショナルデータベースの整合性の制約-見落とすべきですか?
大規模なクエリを高速化し、より良い結果を得るには、リレーショナルデータベースで(FOREIGN KEY制約定義を介して)関係の強制を取り除く方が良いと言うので、私は私が働いている会社の開発者と恒久的に話し合っています。パフォーマンス。 検討中のプラットフォームはMySQL 5.xであり、FOREIGN KEYがセットアップされておらず、関連するテーブルの一部のPRIMARY KEY制約が欠けていても、少なくとも私にとっては妥当ではありません。多分彼らは正しいのですが、私は間違っていますが、私はこの状況について議論するのに十分な議論がありません。 これは3年間、推奨されるアプローチでした。私はこの会社の新人です(わずか1か月)が、製品が「機能する」ため、データベースを拡張するのにためらいがあります。それにもかかわらず、最初に気付いたのは、1ページの読み込みに1分(はい、60秒!)かかっていることです。 現在の状況の背後にある主張の1つは、「非正規化された」データベースは正規化されたデータベースよりも速いということですが、私はそれが本当だとは思いません。 関連するクエリのほとんどにJOIN操作が含まれているため、大量のデータがあると非常に遅くなります(データベースには数百万の行が含まれます)。 通常、「CRUD」操作の処理は、アプリケーションプログラムコードレベルで実装されます。たとえば、FROMからデータを削除するには、次のようにしましょうTableA: との行の間に何らかの関係があるかどうかをその場で最初に確認する必要がTableAありますTableB。 上記の関係が「検出」された場合、アプリプログラムコードは関連する行の削除を許可しませんが、 何らかの理由でアプリのプログラムコードが失敗した場合、関連する行とテーブルに関係があるかどうかに関係なく、DELETE操作は「成功」します。 質問 議論を深めるために、私が良い、正確で確固とした答えを詳しく説明するのを手伝っていただけませんか? 注:たぶん、このようなものは以前に尋ねられた(そして答えられた)かもしれませんが、Googleを使用して何も見つけることができませんでした。

4
数百万行の分類されたデータやSQLマジックを保存しますか?
私のDBAの経験は、単純なストレージ+ CMSスタイルのデータの取得よりもはるかに進んでいないため、これはばかげた質問かもしれませんが、わかりません! 特定のグループサイズと特定の期間内の特定の日数の休日価格を検索または計算する必要があるという問題があります。例えば: 1月のいつでも2人で4泊できるホテルの部屋はいくらですか。 たとえば、5000のホテルの料金と空き状況のデータは次のように保存されています。 Hotel ID | Date | Spaces | Price PP ----------------------------------- 123 | Jan1 | 5 | 100 123 | Jan2 | 7 | 100 123 | Jan3 | 5 | 100 123 | Jan4 | 3 | 100 123 | Jan5 | 5 | 100 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.