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

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

3
高速(<1s)の読み取りクエリパフォーマンスを備えた大規模(> 22兆項目)地理空間データセット
私は、迅速な読み取りクエリのパフォーマンスを必要とする大規模な地理空間データセット用の新しいシステムを設計しています。したがって、次の状況で必要なパフォーマンスを達成するために、適切なDBMS、データ構造、または代替方法について可能性があると思うか、経験/アドバイスを持っている人がいるかどうかを確認したいと思います。 データは、処理された衛星レーダーデータから継続的に生成され、グローバルカバレッジになります。衛星の解像度と地球の土地被覆率に基づいて、全データセットを推定して、地球上の750億の場所で値を生成します。単一の衛星の寿命にわたって、出力はこれらの場所のそれぞれで最大300の値を生成します(したがって、22兆を超える値の合計データセット)。これは1つの衛星のためのものであり、軌道上にはもう1つの衛星があり、新しい数年でもう2つの衛星が計画されています。したがって、多くのデータがあります!単一のデータアイテムは非常に単純で、(経度、緯度、値)のみで構成されますが、アイテムの数が原因で、1つの衛星で最大100 TBを生成すると推定しています。 書き込まれたデータは更新する必要はありません。新しい衛星の取得が処理されると成長するからです。書き込みパフォーマンスは重要ではありませんが、読み取りパフォーマンスは重要です。このプロジェクトの目標は、Googleマップ上のレイヤーなどのシンプルなインターフェイスを介してデータを視覚化できるようにすることです。各ポイントには、時間の平均、勾配、または何らかの関数に基づいた色付きの値があります。(投稿の最後にデモ)。 これらの要件から、データベースはスケーラブルである必要があり、クラウドソリューションを検討する可能性があります。システムは、「points near(lat、lon)」や「points within(box)」などの地理空間クエリを処理できる必要があります。また、単一のポイントと最大で50,000ポイント(ただし、最大200,000ポイントが望ましい)。 これまでのところ、1億1100万の場所に最大7億5,000万のデータ項目のテストデータセットがあります。私はpostgres / postGISインスタンスを試してみましたが、これは問題なく動作しましたが、シャーディングの可能性がなければ、これはデータの増加に応じて対処できるでしょう。シャーディングでは、データボリュームに合わせて拡張するだけで十分な場合があります。最近、私はelasticsearchについて少し学んだので、これについてのコメントは私にとって新しいので役立つでしょう。 完全なデータセットで達成したいものの簡単なアニメーションを次に示します。 このgif(私のpostgresトライアルから)は(6x3)事前に計算されたラスタータイルを提供し、それぞれが〜200,000ポイントを含み、それぞれを生成するのに〜17秒かかります。ポイントをクリックすると、1秒未満で最も近い場所にあるすべての履歴値を取得して、グラフが作成されます。 長い投稿に謝罪、すべてのコメント/アドバイスは大歓迎です。

3
相互に排他的なサブクラスを持つタイプ/サブタイプデザインパターンでのサブタイプのサブタイプの実装
前書き この質問が将来の読者に役立つように、一般的なデータモデルを使用して、直面している問題を説明します。 我々のデータモデルは、としてラベル付けされなければならない3つの事業体で構成A、BおよびC。物事をシンプルに保つために、それらの属性はすべてintタイプになります。 エンティティにAは次の属性があります:D、EおよびX; エンティティにBは次の属性があります:D、EおよびY; エンティティにCは次の属性がDありZます。 すべてのエンティティが共通の属性を共有Dしているため、タイプ/サブタイプデザインを適用することにしました。 重要:エンティティは相互に排他的です!これは、エンティティがAまたはBまたはCであることを意味します。 問題: エンティティAにBは、さらに別の一般的な属性Eがありますが、この属性はエンティティに存在しませんC。 質問: 可能であれば、上記の特性を使用して設計をさらに最適化したいと思います。 正直に言うと、これをどのように行うのか、どこから試すのかわからないので、この投稿です。

4
データベースが3番目の正規形に正規化されているかどうかを確認するツールはありますか?
最近、正規化について学び、新しいスキーマを実装するときにそれがどれほど重要かを理解しました。 データベースが2NFまたは3NFに準拠しているかどうかを確認するにはどうすればよいですか? 手動レビューは確かなオプションですが、ここでは自動化されたツールを探しています。 私は、ポイントアンドクリックツールを探しているのではなく、テーブル3NFを準拠させるために可能な最適化を強調するものを探しています。良いサンプルデータやカラム名のセマンティック分析に基づいた統計を使用するかもしれないと思います。

5
空の列はテーブル内のスペースを占有しますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 非常に基本的な情報を保持するテーブルがあります。タイトルといくつかの日付フィールドのみ。コメントと呼ばれるvarchar(4000)というフィールドが1つあります。ほとんどの場合、空白のままにしますが、ここに大量のデータを入力することもあります。これは本当に悪いデザインですか?または、これはわずかに非効率ですか? この列に別のテーブルを作成する方が良いと思います。 注:これはSQL Server 2008です

1
データベース設計:同じテーブルに対する2つの1対多の関係
私は、Chequing_Accountテーブル(予算、iban番号、およびアカウントの他の詳細を含む)を持っている状況をモデル化する必要があります。 言い換えれば、同じテーブルの2つの1対多の関係があります。 正規化の要件を尊重するこの問題の解決策を聞きたいです。私が聞いたほとんどのソリューションは次のとおりです。 1)PersonとCorporationの両方が属する共通エンティティを見つけ、これとChequing_Accountテーブルの間にリンクテーブルを作成します。これは私の場合は不可能であり、この特定のインスタンスではなく一般的な問題を解決したい場合でも可能です。 2)2つのエンティティをChequingアカウントに関連付ける2つのリンクテーブルPersonToChequingAccountとCorporationToChequingAccountを作成します。ただし、2人の人物が同じ当座預金口座を持つことは望ましくありません。また、自然人と法人が当座預金口座を共有することは望ましくありません。この画像をご覧ください 3)法人および自然人を指す2つの外部キーをChequing Accountに作成しますが、個人と会社が多数の当座預金口座を持つことができるように強制しますが、ChequingAccount行ごとに両方の関係が指すことはないことを手動で確認する必要がありますchechquingアカウントは法人または自然人のいずれかであるため、法人および自然人。この画像をご覧ください この問題を解決する他の方法はありますか?

7
1つのレコードにブール値列のtrue値を強制し、他のすべての値にfalse値を強制するにはどうすればよいですか?
テーブル内の1つのレコードのみが、そのテーブルにアクセスする可能性のある他のクエリまたはビューの「デフォルト」値と見なされるように強制します。 基本的に、このクエリが常に正確に1行を返すことを保証したいと思います。 SELECT ID, Zip FROM PostalCodes WHERE isDefault=True SQLでこれを行うにはどうすればよいですか?

4
エンティティ関係の問題
このように関連する4つのテーブルがあります(例です)。 Company: ID Name CNPJ Department: ID Name Code ID_Company Classification: ID Name Code ID_Company Workers: Id Name Code ID_Classification ID_Department classificationwith があるとしid = 20, id_company = 1ます。そして、departmentそれはid_company = 2(別の会社を表す)持っています。 これにより、分類と部門が別々に会社にリンクされるため、2つの会社の従業員を作成できます。そんなことはしたくないので、人間関係に問題があり、それを解決する方法がわかりません。

2
ダンプの復元中にすべての制約とテーブルチェックを無効にします
私は私のPostgreSQLデータベースのダンプを取得しました: pg_dump -U user-name -d db-name -f dumpfile 次に、次のコマンドを使用して別のデータベースに復元します。 psql X -U postgres -d db-name-b -f dumpfile 私の問題は、データベースに参照制約、チェック、トリガーが含まれていることと、これらのチェック(特にチェック)の一部が復元中に失敗することです。たとえば、テーブルへの行の挿入は、他の無関係なテーブルで条件が成立するかどうかをチェックCHECKするplpgsql関数を呼び出すに関連付けられます。後者のテーブルがpsql前者の前に読み込まれない場合、エラーが発生します。 以下は、一度ダンプするpg_dumpと復元できないデータベースを生成するSSCCEです。 CREATE OR REPLACE FUNCTION fail_if_b_empty () RETURNS BOOLEAN AS $$ SELECT EXISTS (SELECT 1 FROM b) $$ LANGUAGE SQL; CREATE TABLE IF NOT EXISTS a ( i INTEGER NOT NULL ); …

5
データベースの整合性を強化する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 これは、外部キー、チェック制約などを持たせる代わりに、アプリケーションにデータベースの整合性を強制することに意味があるでしょうか? 内部データベースツールを使用してデータベースの整合性を強制しない場合、パフォーマンスの向上はどの程度期待できますか?

4
SSD上のSQL Serverデータベース-テーブルごとに個別のファイルを使用する利点はありますか?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 約30のテーブルがあるデータベースを作成しています。各テーブルには数千万の行が含まれ、各テーブルには単一の重要な列とプライマリ/外部キー列が含まれ、重い場合でもクエリの効率を最大限に高めます。更新と挿入を行い、クラスター化インデックスを多用します。2つのテーブルには可変長のテキストデータが含まれ、そのうちの1つには何億もの行が含まれますが、残りのテーブルには数値データのみが含まれます。 使用可能なハードウェア(約64 GBのRAM、非常に高速なSSD、および16コア)からパフォーマンスの最後の一滴を絞り出したいので、各テーブルに独自のファイルを持たせることを考えていました。 2、3、4、5、またはそれ以上のテーブルに参加しています。各テーブルは常に個別のスレッドを使用して読み取られ、各ファイルの構造はテーブルの内容と密接に調整されます。 SQL Serverが特定のテーブルの内容に追加するため。 1つの注意点は、SQL Server 2008 R2 Web Editionにこだわっています。これは、自動水平分割を使用できないことを意味します。これにより、パフォーマンスの向上として除外されます。 テーブルごとに1つのファイルを使用すると、実際にパフォーマンスが最大化されますか、それとも冗長になるビルトインSQL Serverエンジンの特性を見落としていますか? 次に、テーブルごとに1つのファイルを使用するのが有利な場合create table、特定の論理ファイルではなくファイルグループにテーブルを割り当てるオプションしか提供されないのはなぜですか?そのため、シナリオ内のすべてのファイルに対して個別のファイルグループを作成する必要があります。これは、SQL Serverが、提案していることを実行することで得られる利点を想定していないことを示唆しています。

2
型フィールドのINTまたはCHAR
テーブルまたはTypeフィールドの最適な設計は何ですか?言い換えれば、このスキーマが与えられた場合:intchar(1) create table Car ( Name varchar(100) not null, Description varchar(100) not null, VehType .... not null ) それがために(パフォーマンス的に)、より効率的でVehTypeあることをintかchar(1)?5種類の車があり、0〜4の増分値を使用するか、タイプの文字(たとえば、「v」、「s」、「c」、「t」、「m」)を使用する必要があるとします。 それ以上の場合は、別のTypeテーブルを使用して外部キー関係を作成しますが、その必要性はわかりません。 私がいることがわかりsys.objectsカタログビューが文字使用するtypeフィールドを。その理由はありますか?私はただここで薄い空気をつかんでいますか、それは私がより快適なものですか?

3
列名の命名規則とベストプラクティス
列の命名に関しては、ベストプラクティスに関する専門家の意見をいくつかお願いします。 背景は、ウィキペディアによると、次の構文、 SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID); より効率的です SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID); ただし、JOIN ... USING構文はグローバルに一意の名前を持つすべての主キー列でのみ機能します。したがって、これは正しいことと考えられているのだろうか。 個人的に、私はいつもPK column id、および外部キーcolumnを持つテーブルを作成するために使用していましたothertable_id。しかし、その方法ではUSINGまたはを使用することはできませんNATURAL JOIN。 デザインスタイルへのリンクまたはテーブルデザインのベストプラクティスガイドも歓迎します。


5
SQL Server-レポート用の別のデータベース?
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 SQL Serverには、各Webアプリ用のデータベースがあります。レポートには、Reporting Servicesを使用し、すべてのレポートデータ(レポートパラメーターを含む)はストアドプロシージャから取得します。 ストアドプロシージャは、レポート内のデータと同じデータベースにあります。したがって、たとえば、Stockレポートを提供するprocはStockデータベースにあります。一部のレポートには、複数のデータベースからの情報が表示され、procはそれらのソースデータベースのいずれかになります。レポートパラメータは、店舗、従業員などのデータを持つエンタープライズデータベースのプロシージャからデータを取得します。 つまり、すべてのレポートには、少なくともエンタープライズデータベースへの接続と別のデータベースへの別の接続があり、場合によってはそれ以上の接続があります。 私の質問は、レポートプロシージャを別の「レポート」データベースに移動することの利点があります。レポートを別のサーバーに移動することの利点を知っていますが、それについては話していません。これは同じサーバー上にあります。 これに影響する可能性のあるものは次のとおりです。 レポートに複数のデータベース接続があると、レポートの速度に影響しますか? レポートプロシージャをデータとは別のデータベースに配置すると、インデックス付きビューを使用できなくなりますか? 別のデータベースでレポートを管理する方が簡単/難しいと感じましたか? ご意見をお聞かせください。

2
MySQLのVARCHARデータ型とTEXTデータ型の違いは何ですか?
バージョン5.0.3(VARCHARを65,535バイトにすることができ、末尾のスペースの切り捨てを停止した)の後、これら2つのデータ型に大きな違いはありますか? 私は違いのリストを読んでいたのですが、注意すべき点は2つだけです。 BLOBおよびTEXTカラムのインデックスの場合、インデックスプレフィックス長を指定する必要があります。CHARおよびVARCHARの場合、プレフィックスの長さはオプションです。セクション7.5.1「カラムインデックス」を参照してください。 そして BLOB列とTEXT列にDEFAULT値を含めることはできません。 TEXTデータ型にはこれら2つの制限があるため、なぜvarchar(65535)で使用するのでしょうか?一方のパフォーマンスが他方のパフォーマンスに影響しますか?

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