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

リレーショナルデータベースは、データのリレーショナルモデルに基づくデジタルデータベースです。このモデルは、列と行の1つ以上のテーブル(または「リレーション」)にデータを編成します

7
代理キーをユーザーに公開する必要がありますか?
多くの場合、自然キーを持たないテーブルでは、ユーザーが一意に生成された識別子を保持できると便利です。テーブルに代理主キーがある場合(そして、そのような場合は必ず期待します)、そのキーをユーザーに公開する必要がありますか、その目的で別のフィールドを使用する必要がありますか? サロゲートキーを公開しない理由の1つは、レコード間の関係を保持する操作を実行できないが、特定の種類の削除/再挿入、1つのデータベースからデータをコピーする多くの方法など、キー値を変更することです他など 代理キーを公開する主な利点は、とにかく持っているフィールドを簡単に使用できることです。 どのような状況で、代理キーをユーザーに直接公開する方がよいでしょうか?

7
SQLが関係ベースの関数型言語として知られているのはなぜですか?
ほとんどの言語は、「関係ベース」または「高レベル」の2つに分類されることを学んでいます。私は以前にSQLを使用したことがありませんが、その構文を読むと、機能/関係ベース(Lisp、Haskell)よりも命令的/高レベルの構文のように見えますか? または、教授の講義ノートの私の解釈が間違っている可能性があります...しかし、SQLは(高レベルではなく)関係ベースの言語の1つとして間違いなくリストされており、関係ベースと機能的...またはおそらく、SQLがリレーショナルデータベースを扱うという事実が機能言語を実装すべき方法にする理由を理解していないのでしょうか?(そして、プログラミング言語を分類するときに「関係ベース」が「機能的」と同等である理由は?) ありがとう:)

4
文字列のリストを単一のデータベースフィールドに格納することは悪い考えですか?どうして?
最近、いくつかのレガシーシステムに取り組み始めました。それを開発した人々は、データベーステーブルの単一のフィールドに文字列のリストを格納するというアイデアを思いつきました。これは、データベースに表現もデータもないオブジェクトの識別子であるとしましょう。その識別子の範囲は、本番環境では比較的小さくなります。 一方、私の直感と「良いデザインの好み」は、別のテーブルで表現する必要があることを示しています(多対多の関係を表すために使用されるテーブルと同様)。 彼らのアプローチは本当に悪いのですか?リファクタリングを開始する方が良いでしょうか?はいの場合、元の設計が将来どのような悪影響をもたらす可能性がありますか?そのアプローチを説明するリレーショナルデザインの原則はありますか? コメントの返信を編集: おそらく、彼らはこのアプローチを使用して、階層構造化などの特定の問題を巧妙な方法で解決していません。最もありそうなシナリオは、彼らが時間のプレッシャーの下で単に働いていて、できるだけ早く新機能を実装する必要がある場合でした。 以前はフィールドが単一の値を表していたと思います。彼らは複数の値を保存する機能を実装する予定で、データベースの移行を回避しようとしました。

2
余分な列を持つ単一のテーブルとスキーマを複製する複数のテーブル
私はプロジェクトに取り組んでいます。ある時点で、データベースに、すべてのレコードが使用するわけではない複数の列を持つ単一のテーブル、または複製されたスキーマを持つ複数のテーブルが必要かどうかを決定する必要がありました。 複数のスポーツを処理できるスポーツ情報アプリケーションを作成しています。たとえば、NBA、NHL、MLB、NFLを処理できます。各スポーツには、チーム、スケジュール、怪我、選手情報など、非常に似た概念があります。 もちろん、データソースは同じスキーマ内の各データを提供しません。各スポーツには、ベンダーからデータを受け取る異なるスキーマがあります。 共通性を判断するためにデータフィードの事前分析を行うのに十分な時間(クライアントの要求)がなかったため、賭けをヘッジし、「安全な賭け」を行い、すべてのテーブルのセットの代わりに、スポーツごとに個別のテーブルを作成しました使用されるスポーツ。 その結果、いくつかのテーブルでスキーマが複製され、データベースへのインターフェイス(ストアドプロシージャなど)も複製されます。NBA_Game、NFL_Game、NBA_Team、NFL_Teamなどがあります。各テーブルには、他のテーブルにはないプロパティがいくつかあり、いくつかのプロパティは共有されています。4〜5回のスポーツで5〜10個のテーブルが続きます。これが完全に悪いことであるかどうかはまだわかりません。すべてのスポーツが使用するわけではないプロパティを持つテーブルの単一セットを持つ代替案は、それ自体も扱いにくいかもしれません。 これを行った人は、この種の設計の落とし穴にぶつかり、ここで自分の経験を共有できますか?将来の困難な方法を学ぶのではなく、今私が知るのに役立つかもしれないことは何ですか?すべてのレコードが使用するわけではない列を使用して、1つの大きなテーブル/テーブルのセットを使用して、別の方法でそれを実行しましたか?どんな落とし穴に遭遇しましたか? 過去に使用したテーブル継承など、より適切に機能する代替手段はありますか? ありがとう

4
これらの特定のテーブルには代理キーが必要ですか?
バックグラウンド このテーブルがあります +-------------------------+ +------------------------+ |Airport | |Country | |-------------------------| |------------------------| |airport_code string (PK) | |country_code string (PK)| |address string | |name string | |name string | +------------------------+ +-------------------------+ +-------------------------+ |Currency | |-------------------------| |currency_code string (PK)| |name string | +-------------------------+ airport_codeは、IATA(国際航空運送協会)の 空港コードです。飛行機で旅行する場合は、荷物タグで確認できます。 country_codeはISO 3166-1 A3標準の国コードです。オリンピックで見ることができます。 currency_codeは、IS0 417標準の3文字の通貨コードです。国際通貨交換の表示板で確認できます。 ご質問 これらの自然なPKは十分ですか? 業界全体で受け入れられているPKにとって十分な世界的に尊敬されている標準を使用していますか? この表には、何があっても代理変数が必要ですか?

4
データベーススキーマの移行は運用環境で問題になりますか?
NoSQL対SQLデータベースに関する議論で、スキーマを新しいバージョンに移行するのは問題があるため、企業はスキーマレスのNoSQLデータベースを使用することを好むと聞きます。しかし、アップグレードを行うとき、それは本当に大きな問題ですか?リレーショナルデータベースは、このような操作に悪いですか? MongoDBブログの次のブログ投稿を読んでください。なぜSchemalessなのですか?

5
私のチームは、外部キー関係を持つリレーショナルデータベースエンティティが怖いので、理由がわかりません
私は比較的大学を卒業していないので、リレーショナルデータベースに関する私の知識のほとんどは、BCNFまたは3NFにないものはすべてわいせつである私のデータベースコースからのものです。確かにそれは極端なことの一端ですが、仕事中の私のチームは本当にそれを完全に反対側に持っているようです。 マイクロサービスdbスキーマでは、エンティティが複数のテーブルを持つことはめったにありません。通常、別のテーブルに正規化するものはすべてjson列に格納されます。このjsonのプロパティの1つをクエリする必要があることが後で発見された場合、新しい列が追加され、データは両方の場所(はい、同じテーブルの2つの異なる列)に保存されます。 多くの場合、これらのjson列には間違いなく利点があります。そのデータを照会する必要がなく、そのデータに一方的な変更を加える必要がない場合(これは明らかに予測できないことです)、それは悪い考えではありません。さらに、当社のサービスの多くは、サーバーを認識しないか、必要なディスク容量のわいせつなマシンでホストされているため、データの重複は大きな問題ではありません。(私が一般的に哲学から避けたいことですが) 現在、所有する一連の条件に基づいてルールに一致するサービスを構築し、ルールが真(たとえば、すべての条件が真)の場合にそれらのルールに関連付けられた一連のアクションを実行します。このサービスを最も迅速に構築している私のサブチームは、スキーマ内のルールから離れてアクションと条件を正規化することには大きなメリットがあると考えています。明らかに、これらのテーブルは、ルールIDとの外部キー関係を維持します。私たちの観点からは、条件でのデータの重複を避けることができ、一度だけ評価されることを保証できます。また、必要なときに必要な条件やルールを見つけやすく、すべてのルールを引き出してメモリ内で検索する必要がありません。 今日、私たちの主任技術者の一人と話して、彼は私をこのスキーマから遠ざけようとしました。私たちが実際にそれを必要としないとあらゆる方法で議論しようとすると、将来的にパフォーマンスの問題が発生し、所有する古いモノリスを参照します。彼は、私たちがやっていることを「古い方法」と呼び、jsonを含むフラットテーブルを「新しい方法」と呼びました。彼は、私が原子性を望む場所ではそれを必要とせず、クエリの代わりにメモリ内でより多くのことをすべきだと主張した。これは、現在当社のサービスの多くが従っている設計原則です。データの量が大幅に増加することは予想していませんが、これによりクエリを高速に保つことができます。予想されるのは、ルールの評価とアクションの実行に多くの時間を費やすことです。 非リレーショナルデータベースが近年人気を博していることは理解していますが、外部キー関係のパフォーマンスへの影響に関する情報を積極的に検索しても、彼の主張を裏付ける情報は多くありません。問題を引き起こす可能性のある大規模なトランザクションを導入する傾向があると思いますが、それは外部キー自体とは無関係の問題のようです。 これは私の素朴ですか?または、これは本当に私と私のサブチームに欠けているものがありますか?解決策を必ずしも探しているわけではないので、問題に関する詳細な情報を明示的に提供していません。それが私たちの大規模なチームで一般的な傾向であることを考えると、彼らがこれで何かに取り組んでいるかどうかは本当に興味があります。

4
1対1の関係を凝縮しないことが理にかなっていますか?
テーブルBと1対1の関係を持つテーブルAがある場合、それらを離しておくことは意味がありますか?または、それらを単一のテーブルに結合しても害はありませんか?これらのシナリオ(2つのテーブルと1つの結合されたテーブル)のいずれかが、通常の形式(1NF、2NF、3NFなど)に関して何か影響を与えますか?

4
リレーショナルデータベースで列挙型をどのように表す必要がありますか?
私は自分の会社で作業しているデバイスで発生するトランザクションを追跡するリレーショナルデータベースの開発に取り組んでいます。デバイスで発生する可能性のあるトランザクションにはさまざまなタイプがあるため、メインレコードテーブルの1つに「trans_type」フィールドがあります。私のグループは、このフィールドの型を整数にし、列挙型として扱うことにしました。私の直感では、このフィールドを文字列にしてデータベースのデータをより読みやすく使いやすくすることをお勧めします。私の同僚は、これが価値以上のトラブルを引き起こすのではないかと心配しているようです。文字列の比較はコストがかかりすぎるため、タイプミスの可能性はあまりにも大きな障壁です。 したがって、あなたの意見では、本質的に列挙値であるリレーショナルデータベースのフィールドを扱うとき、このフィールドを整数または文字列にする方が設計上の判断が優れていますか?または、私が見落とした他の選択肢はありますか? 注:明示的な列挙型は、使用しているデータベースではサポートされていません。そして、このデータベースとのインターフェースとなる開発中のソフトウェアはC ++で書かれています。

2
サブスクリプション、残高、価格プランの変更の処理[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 序文 私の目的は、サブスクリプションを管理するために、複数のプロジェクト用の再利用可能なコードを作成し(そしてgithubで公開することです)。ストライプと定期請求プロバイダーについては知っていますが、このモジュールが目指しているのはそれではありません。アカウントの残高を計算するためのラッパー/ヘルパー、サブスクリプションを更新するための簡単な通知、および価格計算を処理するための単なるラッパー/ヘルパーでなければなりません。 プロバイダーまたは支払いの可能性が不十分またはまったくサポートされていないか、高額すぎる(マイクロペイメント)ため、繰り返し請求を使用できない国があります。また、定期的な請求を使用したくないが、年末に請求書を手動で支払う/請求書を保存する人もいます。したがって、PayPalの定期的な請求、繰り返しまたは同様のサービスを提案しないでください。 状況 サブスクリプションプランにサブスクライブできるモデルがあるとします(例:)User。このモデルには、現在サブスクライブしているサブスクリプションプランの識別子を格納するフィールドがあります。そのため、計画が変更されるたびに、変更が記録されます。 SubscriptionPlanChanges前述の変更を記録する次のフィールドを持つモデル(など)があります。 subscriberサブスクライブモデルに関連する(Userこの場合) from_plan モデルが変更前に持っていたプラン識別子を定義する to_plan モデルが現在選択しているプラ​​ン識別子を定義する created_at 変更を保存する日時フィールドです valid_until 実際のサブスクリプションが有効になるまで日付を保存します paid_at また、サブスクリプションが支払われたかどうか(およびいつ支払われたか)を定義する日時フィールドです。 もちろん、そのレイアウトは議論可能です。 アカウント残高の質問 ユーザーがサブスクリプションプランを変更する場合、プランフィールドを比較し、価格を取得し、現在のプランvalid_untilとその価格に基づいて新しいプランの控除を計算する必要があります。説明:プランAの1年間をサブスクライブしましたが、6か月後にプランBにアップグレードすると、プランAの6か月の支払額の半分が差し引かれます。 私が不思議に思っているのは、ユーザーが無料プランに切り替える場合など、ユーザーが再度切り替えたい場合に控除できるクレジットを持っていることです。その値を追加のフィールドにキャッシュするか、そのユーザーに関連するすべてのレコードを毎回計算しますか?テーブルのレイアウトについて何か追加/変更しますか? わかりやすさの質問 サブスクリプション期間の終わりが来ると、ユーザーは通知を受け取り、再度支払うことでサブスクリプションを更新する可能性があります。最も簡単な方法は、更新するだけpaid_atでvalid_until、新しいサブスクリプションオプションを使用することです。ただし、支払い/購読履歴など、誰かが必要とする可能性のあるすべてのデータを保存するかどうかはわかりません。 別のオプションは、このための追加レコードを作成するだろうfrom_planとto_plan(したがって、「変化なし」を象徴しない)同じ識別子を持っているし。しかし、それは何らかの形で口座残高の計算を妨げませんか? そのようなサブスクリプションを処理するロジックについて誰かが私を正しい方向に向けることができたら、とても感謝しています。 更新 今では助けてくれてありがとう。私の質問はあまりにも曖昧だったので、抽象化を少なくして、より正確になろうと思います。残念ながら、まだ問題を解決できませんでした。 ケースA Userはを選択できますSubscription Plan A。これは現在SubscriptionPlanChange、それを追跡するために保存されます。たとえば5か月後User、サブスクリプションをにアップグレードしますSubscription Plan B。そのため、彼は新しいサブスクリプションの価格を支払い、未使用の7か月のプランaの価格を差し引きます。 ケースB 3か月後、User彼のに戻りSubscription Plan Aます。彼は支払いをする必要はありませんが、残高を受け取るので、サブスクリプションの終了時に、彼は新しいサブスクリプションのためにその残高を差し引きます。 ケースC Userでは、独立したサブスクリプションプランを持つサブサービスのサブスクリプションプランを選択できます。同じでCase A、Case Bそのサブサービスのサブスクリプションに適用できます。 _Case D_ ユーザーがサブスクリプションの1つをキャンセルします。これにより、彼のバランスが回復します。 私の質問(少なくとも現在)は、主にそのデータを適切に保存する方法に依存しているので、ビジネス分析のためにサブスクリプションの履歴を再現し、残高を計算し、サブスクリプションに基づいて未払いを得ることができます。 また、ユーザーモデル自体などに残高を保存する必要があるかどうか、または保存されていないが保存されたデータ/履歴に基づいていつでも計算できるかどうかもわかりません。 注意すべき点がいくつかありますが、問題が発生することはないと思います。 …

10
RDBMSはどのように流行と見なすことができますか?
2003年にコンピューティングAレベルを完了し、2007年にコンピューティングの学位を取得し、SQLの使用が多い企業での取引を学び、ストレージにリレーショナルデータベースを使用するというアイデアを思いつきました。 そのため、開発は比較的初心者でしたが、次のようなコメント(/software//q/89994/12436)を読むのに驚きました。 [一部の開発者]は[SQL]を軽deし、それとRDBMSは流行だと思います 明らかに、有能な開発者は適切なジョブに適切なツールを使用し、ストレージ用のフラットファイルまたは別のソリューションが適切な場合にリレーショナルデータベースを作成しませんが、RDBMは非常に多くの状況で役立ちます。流行と考えられますか?

2
BツリーとRツリーの比較-リンクされた一連のリンクされたリストだけではありませんか?
私はBツリーにかなり精通しており、主にデータベースに電気、エアコン、ハードドライブスペースを十分に供給し続ける必要があります。二重(doubl [ie、ey]?)リンクリストに関連付けます。 今日、昼食時の開発者の1人がRツリーについて言及しました。 ウィキペディアに飛び乗って読み始めました。それは背の高いBの木のようなひどい音に聞こえました。残念ながら、数学の背景が深いと、同僚の何が話しているのか理解するのが難しくなります。 誰かがBツリーとRツリーのいくつかの違いを明確にしてくれるといいのですが。私はおそらくとにかくみんなに尋ねることになるでしょうが、彼らが私の質問に答えるという保証はありません。おそらく彼らは神についてとりとめないようになるでしょう何を知っています。。。

1
リレーショナル代数/計算の証明を使用してSQLをテスト/検証できますか?
SQLステートメント、関数、およびストアドプロシージャの正当性をテスト/検証するために、証明の形式でリレーショナル代数および/またはリレーショナル計算を使用することは可能ですか、それとも可能ですか? 少なくともそれは可能であるように思えますが、証拠とコードの間の1:1マッピングを不正確にする欠落している詳細があるかどうかはわかりません。 このような方法を試した人はいますか?うまくいきましたか?どのような体験をしましたか?

2
リレーショナルデータベース回帰テストのデータ品質
私は、ミュージアムのアクセッション、寄贈、貸与、またはその他の方法で取得したアーティファクトを追跡するために使用されるオープンソースのミュージアムコレクション管理Webアプリケーションに取り組んでいます。 これには、(以前の経験と比べて)かなり大規模なデータベースの設計と作成が含まれ、さまざまな種類のさまざまな情報(アーチファクト情報、場所の変更情報、個人の連絡先情報、写真など)が格納され、柔軟で簡単に拡張できる必要があります。 。 私は大学の学位を取得したばかりで、データベースの設計に関しては専門家ではないので、自分が持っているものが「機能する」ことを確認するための完全なテストスイートを作成したいと思っています。 私はデータベースのテストを読み、データベースに関する回帰テストについて言及しているいくつかの記事に出くわしましたが、これがすべてに関係していることを完全には理解していません。Dr.Dobbsでこの記事を読んだことで、データベース内のロジックが正しいことを検証することが、必要なテストの1つであることを理解しています。したがって、特定のデータをデータベースに挿入するテストを作成し、それをクエリでフォローアップして、データベースから正しいデータが返されることを確認します(すべての適切なトリガーまたはビューが機能していることを確認します)。 混乱は、「データ品質」のテストについての言及で生じます。上記の記事で、著者はテストで以下を検証したいと述べています: 列ドメイン値のルール 列のデフォルト値のルール 価値存在ルール 行の値のルール サイズルール これにはどのような種類のテストが含まれ、どのように実装されますか?また、これはデータベースのテストスイートを初めて作成するのですが、テスト開発をガイドするために開始する方法/場所、または実行できるプロセスに関する優れたガイドラインはありますか?

3
ORMはツリーのようなDB構造にとって悪いツールですか?
この質問は意見に基づくものとして締めくくられるかもしれませんが、今必要なのは議論によって裏付けられたいくつかの意見です。 PostgresとEcto(Elixir)を永続化レイヤーとして使用してアプリケーションを構築しています。それ自体を参照するエンティティがあるため、それを使用してツリーのような構造を構築できます。Ectoでこれをやろうとすればするほど、いらいらします。 ORMは、多くの関連付けを持つ複雑なDB構造を作成するための単なる悪いツールですか?ORMがリレーショナルデータに適用しようとするオブジェクト指向の方法は、ここでは悪いアプローチのようです。オブジェクトは分離されています。それらが他のオブジェクトと相互作用する場合、それらは(想定されている)メッセージを送信します。彼らの内面の詳細は隠されたままである必要があります。リレーショナルデータは、開いた透明なグラフを形成します。これら二つの世界は私と完全に両立しないようです。 しかし、ORMは非常に一般的で人気があります。Webアプリケーションの大部分はORMでうまく機能する分離されたエンティティで動作しますか、それはなぜですか?ORMフレームワークを使用して平均的に複雑なERDモデルを実装する場合は、簡潔なコードまたはパフォーマンスを犠牲にする必要があるように思われます。

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