タグ付けされた質問 「database-design」

概念スキーマおよび/または論理モデルおよび/またはデータベースの物理設定の開発。

4
5つ以上の列の主キーは、大きなテーブル(1億以上)に適していますか?
私は実際のDBの問題について読んでいましたが、1つのプロジェクトには1億行とテーブルがあり、5列がプライマリでした。私はこれが悪いと思っていますが、誰もが正確にその理由を教えてもらえますか? テーブルは一種のマイクロロールアップ/集計テーブルであったため、5つの列は(day、market_id、product_id ...)のようでした。最初は、5列の主キーは理想的ではないと考えていましたが、考えれば考えるほど、それが悪い理由を考え出すことはできませんでした。 これは深夜の議論で、半数の会社エンジニアが参加しました。誰かがこれは悪い設計だと言った、あるシニアエンジニアは同意したが、誰もその理由について実際に飛び込んだことはなかった。したがって、自分で問題を調査しようとしています!

3
CouchDBとドキュメントのバージョン管理
現在、CouchDBを使用してwiki風のアプリケーションに取り組んでおり、ドキュメントのバージョン管理スキームを実装しようとしています。私がそれを見る方法には、これを行う2つの方法があります: 各バージョンを個別のドキュメントとして保存する 古いバージョンを添付ファイルとして単一のドキュメントに保存します。 今、私は#1が働いている形を持っています。ユーザーがドキュメントを編集して保存すると、バックエンドはまず前のリビジョンを新しいドキュメントにコピーしてから、新しいバージョンを保存します。各ドキュメントには、各バージョンのデータ(古いバージョンのドキュメント_id、タイムスタンプ、エディターなど)を含む「履歴」配列があります。 この履歴配列は、頻繁に更新されるドキュメントではかなり長くなる可能性があるため、通常の読み取り中にドキュメントを取得するビュー(および履歴を取得する別のビュー)があります。 私の質問はこれです:私は現在のアプローチに不安を感じており、「アタッチメント」メソッドへの変更を考えています。確信はないけど。私はCouchDBをよく知っている人(私はこれに数週間しかいませんでした-そしてこれはCouchDB ...とNoSQLを使用した最初のプロジェクトです)がそれぞれの長所と短所を教えてくれることを願っていますアプローチ。または、おそらく私が見落としている他のバージョン管理スキームがありますか?

2
600GBテーブルのインデックス付きキーデータ型をINTからBIGINTに変更する最速の方法
600GB MySQLテーブルでデータ型をINTからBIGINTに変更する必要があります。列には一意のインデックスがあります。私は無署名のINTで良いかもしれませんが、それを変更するか、BIGINTを変更することはほとんど同じ痛みだと思います。テーブルのエンジンはInnoDBです。簡単になるもの: 他の机 構造のコピーと INSERT INTO (SELECT *) テーブルのダンプとダンプファイルテーブル定義の変更 他に何か? 更新:要求どおり、MySQLバージョン5.5.15、外部キーなし、テーブル作成: CREATE TABLE `tbl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `created_at` datetime NOT NULL, `tid` bigint(20) NOT NULL, `t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `f` tinyint(1) NOT NULL, `i_id` bigint(20) NOT NULL, `ir_id` …

2
外部キーとしての複合主キーの効率
重複がテーブルに入力されないようにするために使用される複合主キー(4列で構成される)を持つテーブルがあります。このテーブルのキーを外部キーとして参照する必要がある新しいテーブルが必要になりました。 私の質問は、どのアプローチがルックアップ速度にとってより効率的かです: 1)4列すべてを含む新しいテーブルを作成し、それらをすべて外部キーで参照しますか。 または 2)主キーテーブルに新しいID列を作成し、これを新しいテーブルの外部キーとして使用しますか。 このデータベースは非常に大量のデータを保持することが期待されているため、各テーブルに保持されるデータ量を最小限に抑えることを目的として、これまで構築してきました。これを念頭に置いて、すべての行に2つのint列とdatetime列を保存するため、オプション2が最適なアプローチになりますが、不要な場合はルックアップ時間の増加を避けたいと思います。


2
「アーカイブされているが使用可能な」データのSQL Serverデータベース設計
「縮小」しようとするこの大規模なデータベース(1 TBを超える)があります。データベースは1つの主要なエンティティを中心に展開するため、「訪問」と呼びましょう。議論のために、それが医療行為のデータベースであるとしましょう。 手続き、年次、フォローアップ、予防接種など、合計30の訪問「タイプ」があり、それぞれが「visit_immuno」などの「Visit」への補助表です。 データベースには、2000年以降約12年間のデータが蓄積されています。「ライブ」バージョンに約3年間のデータを保持し、残りを「old_data」データベースに保持することを提案する人がいます。日付は正規化されているため、「Visit」テーブルにのみ保存されます。Visitテーブルには、ROWVERSION列とBIGINT疑似ID(クラスター化)列も含まれます。すべての意図と目的のために、クラスタリングキーにSEQUENCE(SQL Server 2012 Enterprise)が入力されているとしましょうcid。 visit.date医師がデータの彼の「ブリーフケース」を拡張訪問し、リターンになったとき、それはメインテーブルにマージされます例えば、クラスタリング・キーと同じ順序で常にではありません。また、「visit」テーブルにいくつかの更新があり、ROWVERSION列がcidとdate列の両方と同期しなくなります-簡単に言えば、この理由のために適切なパーティションキーを作成することもできROWVERSIONませんcid。 「ライブ」からデータを取り出すためのビジネスルールは、ということであるvisit.date36ヶ月よりも大きくなければなりませんし、子visit_paymentレコードが存在している必要があります。また、「old_data」データベースには、を除くベーステーブルは含まれていませんvisit%。 したがって、次のようになります。 Live DB(毎日使用)-すべてのテーブルOld-Data DB- visit%テーブルの古いデータ 提案では、2つのデータベースのテーブル全体でALLを結合するビュー(およびを除く)のすべてのベーステーブルに対するシノニムを含むシェルである結合DBが必要です。Live DBvisit%visit% 同じインデックスがOld-DataDBに作成されていると仮定すると、クエリはUNION-ALL ビューで適切に実行されますか?UNION-ALL ビューの実行計画をどのような種類のクエリパターンがトリップするか?

4
OracleでNULL可能数を使用しない理由は?
私たちの会社は、共同プロジェクトのために他のソフトウェア会社とインターフェイスをとっており、特定の値を表示しない場合は、-5000(任意のセンチネル値)を渡す必要があると言われました。その理由は、(以前の)Oracle開発者の推奨により、Oracleデータベースの数値列がnull値をサポートしていないためです。また、この会社はコードの大部分をVB6で記述しています(VB.NETへの移行はゆっくりと進んでおり、これもまた別の日のトピックです...)。純粋な好奇心から、この推奨事項の正当な理由はありますか?私の側に何も考えられません。 ---編集 すべてのフィードバックをありがとう。CodeProject.com(link)で同じ質問を投げかけ、非常によく似たフィードバックを受け取りました。この方法が外部キーに関連していることを正当化できる可能性があるのは唯一のようであり、システム内のどこでも外部キーを使用しないと述べることができます。この決定をした開発者(私は以前その会社で働いていた)は、私よりもはるかに多くの経験を持っているので、ris笑が起こる前に、これに対する正当な理由がないことを確認したかった。

2
複数のクエリ列に同じCASE WHEN条件を使用する
SELECT複数の列が同じCASE WHEN条件を使用して、条件が1回だけチェックされるように句を書き換える「より良い」方法はありますか? 以下の例を参照してください。 SELECT CASE testStatus WHEN 'A' THEN 'Authorized' WHEN 'C' THEN 'Completed' WHEN 'P' THEN 'In Progress' WHEN 'X' THEN 'Cancelled' END AS Status, CASE testStatus WHEN 'A' THEN authTime WHEN 'C' THEN cmplTime WHEN 'P' THEN strtTime WHEN 'X' THEN cancTime END AS lastEventTime, CASE testStatus WHEN …

2
ビット列とブール列
ビットフィールドはデータの単なるバイナリ表現であり、わずかに「奇妙な」方法で照会する必要があることを考えると。 ブール値にビットフィールドを使用すると、実際に利点がありますか?私が見ることができることから、スペースが唯一の本当の利点であることを示唆しているようです。

5
調査データベースの設計:回答をユーザーに関連付ける
調査データベースの概念モデルを実行しています。 目標は、ユーザーからの回答を保存することです(Androidアプリになります)。 ユーザー、質問、オプションの3つのエンティティがあります。 質問は(:例えば1つまたは複数のオプションがあります?あなたはどのように多くの従業員が持っていない 1-40、40から1000、+1000)を。 オプションにはテキスト(1〜40)と値(ユーザーが選択した値)があります。 ユーザーはこれらのオプションの1つ(または複数)を選択します。 私の概念設計は次のとおりです。 回答をユーザーに関連付ける方法がわかりません。 その関係をどのように表現できますか? オプション値を表す別のエンティティはありますか? このモデルは、質問と事前に作成された回答(提供された回答)を保存し、さまざまな調査で再利用できるようにします。 私はこのような質問を表さなければなりません: この質問はこれに関連しています:調査データベースの設計:最初のバージョン。エラーはありますか?

4
テーブルなしでデータベースにデータを保存する方法は?
学校で学んだのは、データをテーブルに保存するSQLだけでした。現在、データをXMLファイルに保存するプロジェクトに取り組んでいます。さらに、すべてのXMLにはビジュアルファイル(JPEG)への参照が含まれています。 XML自体には、1,000を超える座標点に加えて、データに関する追加情報が含まれています。 私の意見では、この情報をテーブルに保存しても意味がありません。それに、JPEGファイルをSQLで保存することもできませんでした。 適切な解決策は何ですか、または私の側の推論にエラーがありますか? ご覧のとおり、私はデータベースにはかなり慣れていません。したがって、建設的な提案、リンク、アドバイスは大歓迎です。

2
ストアドプロシージャのパラメーターが多すぎますか?
SQL Server 2008でストアドプロシージャの記述を始めたばかりで、30以上のパラメーターがあります。10個以上のパラメーターを持つものを書いたことはありません。 コンテキストのために...この手順は、本質的になりますINSERT単一のテーブルに単一の行を。非常によく似たものもあります。やや小さいが; 同じテーブルでUPDATEを実行するバージョン。ほとんどの列は比較的小さく、intと文字列が混在しています(varchar(200))。 問題は何ですか。良いか悪いか; 多数のパラメーターを含む手順を作成すること、および他のパターンの検討を開始するしきい値はどれくらいですか?

2
ユーザーイベントデータを保存するための適切なテクニック
データベース設計に関しては、ほとんど独学です。私はこの共通の構造に落ち着いているので、この質問を提起していますが、それが最も効率的または「業界標準」の方法であるかどうか疑問に思っています。 私が設計するほとんどのデータベースにはユーザーテーブルがあり、その後、個人の活動は別のテーブルで追跡されます。データベースの美しさはこの種の効率を備えていることを理解していますが、アクティビティテーブルは、定期的に使用するすべてのユーザーから多くのイベントをかなり迅速に収集するため、中程度のユーザー使用量で非常に迅速に巨大なテーブルになります。このように成長させるのはこのベストプラクティスですか?または、テーブルの階層、日付に基づいて、またはユーザーの量ごとに、または他の何かに基づいて異なるテーブルに分割しますか? +--------------------+ +------------------------+ | UserData | | Activity | +-=------------------+ +------------------------+ | ID (auto uint) | <--1-to-many-+ | ID (auto uint) | | UserName (text) | +--> | UserID (uint) | | Email (text) | | Timestamp (time) | | additional info... | | Type (ID to elsewhere) | …


3
属性の最大数が不明なエンティティを実装する方法は?
私は野球シミュレーションプログラムを設計していますが、boxscoreスキーマの設計で問題に遭遇しました。私が抱えている問題は、各イニングで得点されたランの数を追跡したいということです。実際のプログラムでこれを行う方法は、演奏されるイニングごとに大きくなる動的配列を使用することです。 野球の試合に不慣れな人にとっては、9回のイニングの終わりに試合がまだ結ばれていない限り、試合は通常9イニングの長さです。したがって、野球の試合の長さは不定です。つまり、各イニングの得点に9列しか持たないようにデータベースを設計することはできません(厳密には18(9イニング* 2チーム)。データベースに保存する前にBase64としてエンコードしますが、これが使用するのに適した手法であるかどうかはわかりません。 重要な場合、私が開発しているデータベースはPostgreSQLです。 提案は大歓迎です!ありがとう!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.