問題タブ [database-relations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
7 に答える
386 参照

database - 2つの類似した機能の分野を持つ、データベース設計における相反する欲求

さて、今「ボックスアイテム」の表を作っています。

現在、ボックスアイテムは、使用目的/アイテムのステータスに応じて、「配送」ボックスまたは「返品」ボックスに関連付けられる場合があります。

ボックス アイテムに欠陥がある可能性があります。欠陥がある場合、ボックス アイテムの行にフラグが設定され (IsDefective)、ボックス アイテムは「返品」ボックスに入れられます (他のアイテムはそのベンダーに返品されます)。それ以外の場合、ボックス アイテムは最終的に「配送」ボックスに入れられます (他のアイテムが配送されます)。(配送ボックスと返品ボックスには独自のテーブルがあることに注意してください。すべてのボックスに共通のテーブルが 1 つあるわけではありませんが、可能であれば 3 つ目の可能性としてそれを検討する必要がありますか?)

今日ははっきりと考えていないだけかもしれませんが、この状況で何をすべきか疑問に思い始めました。

私の直感では、一度に 1 つのリレーションしか発生しない場合でも、考えられるリレーションごとに個別のフィールドが必要であることがわかります。これにより、ボックス アイテムのスキーマは次のようになります。

BoxItemID 説明 IsDefective ShippingBoxID ReturnBoxID など...

これによりリレーションが明確になりますが、無駄に思えます (リレーションは常に 1 つしか使用されないため)。そこで、BoxID 用のフィールドを 1 つだけ用意し、IsDefective フィールドに基づいて、それが参照している BoxID (配送または返品ボックス ID) を判断できると考えました。

BoxItemID 説明 IsDefective BoxID など...

これは無駄が少ないようですが、私には合いません。関係は明らかではありません。

それで、Stackoverflow のデータベースの達人であるあなたにそれを言います。この状況であなたはどうしますか?

編集: ご意見をお寄せいただきありがとうございます。いろいろ考えさせられました。1 つには、次にこのようなプロジェクトを開始するときに ORM を使用するつもりです。=) 2 つについては、私は今いないので、4 バイトをかじって 2 つのフィールドを使用します。

みんなありがとう!

0 投票する
2 に答える
550 参照

sql-server - SQL Server と NHibernate の間でカスケード更新/削除を組み合わせる方法は?

手作りのドメイン モデル (クラス) と手作りのデータ モデル (テーブル/関係) を使用してアプリケーションを作成し、NHibernate にマッピングを任せています。

データベースにカスケード更新または削除を実行するように指示するか、NHibernate に実行するように指示する (cascade="all-delete-orphan") のが最善ですか? 両方を同時に設定できますか?

0 投票する
2 に答える
1240 参照

orm - リレーショナル代数を実装するための言語機能

私は Scala でリレーショナル代数をエンコードしようとしてきました (私の知る限り、Scala は最も高度な型システムの 1 つです)、目的の場所に到達する方法が見つからないようです。

私はプログラミング言語設計の学問分野の経験があまりないので、どの機能を探すべきかよくわかりません。

では、静的に検証されたリレーショナル代数を実装するには、どの言語機能が必要で、それらの機能を備えているのはどの言語でしょうか?

要件の一部: Tuple は、静的に定義された問題のタプルの有効な名前のセットから、名前で指定された型の値に名前をマッピングする関数です。この name-type セットをドメインと呼びましょう。

リレーションは、タプルの範囲がセット内で一意であるように、同じドメインを持つタプルのセットです。

これまでのところ、モデルは簡単に Scala でモデル化できます。

Tuple の vals、vars、および defs は、上で定義した名前と型のセットです。しかし、Tuple に同じ名前の定義が 2 つあるはずはありません。また、vars と不純な定義もおそらく制限されるべきです。

トリッキーな部分は次のとおりです。

2 つのリレーションの結合は、タプルのドメインがオペランド タプルのドメインの和集合であるリレーションです。ドメインの共通部分の範囲が同じタプルのみが保持されるようにします。

トリックを行う必要があります。

Relation の射影は、タプルのドメインがオペランド タプル ドメインのサブセットである Relation です。

これは、解決策を見つけることさえ可能かどうかわからないところです。どう思いますか?プロジェクトを定義するために必要な言語機能は何ですか?

上記のオフコースで暗示されているのは、API が使用可能でなければならないということです。定型文のレイヤーとレイヤーは受け入れられません。

0 投票する
2 に答える
206 参照

c# - 関連するテーブルのレコードがLINQ2SQLでロードされるのはいつですか

2つのテーブルがあるとしましょう。

  • 報告する
  • コメント

そして、私がデータベースコンテキストを持っていると仮定します:

各レポートのすべてのコメントもロードされていることを確認するにはどうすればよいですか?

この時点で、データベースから切断したいのですが、コメントにはアクセスできます。(例えば:)

0 投票する
6 に答える
2126 参照

sql - アドレス帳テーブルの設計に関する SQL データベースの問題

現在、ソフトウェアのアドレス帳モジュールを作成しています。非常に柔軟なアドレス帳構成をサポートするように、データベースをセットアップしました。

必要なすべてのタイプの n エントリを作成できます。タイプとは、ここでは「メール」、「住所」、「電話」などのデータを意味します。

「contact_profiles」という名前のテーブルがあります。

これには 2 つの列しかありません。

そして contact_attributes というテーブルがあります。これはもう少し複雑です:

たとえば、ユーザーのテーブルから、これらのプロファイルにリンクできるようになりました。しかし、ここから問題が発生します。

現時点では、取得する値ごとに JOIN を作成する必要があります。何らかの方法でビューを作成する可能性はありますか?それにより、タイプの as 列で結果が得られますか?

だから今、私は次のようなものを得るでしょう

しかし、次のような結果が得られるとよいでしょう。

最初にこのようなテーブル レイアウトを作成したくない理由は、追加するものが常にある可能性があり、同じタイプの複数の属性を持つことができるようにしたいからです。

これを動的に変換する可能性があるかどうか知っていますか?

より良い説明が必要な場合は、お知らせください。

0 投票する
8 に答える
17211 参照

database-design - データベーステーブル間で1対1の関係を使用する場合

DB設計の質問:1対1のリレーションテーブルをいつ使用することにしますか?

私がこれを目にする場所の1つは、たとえば、UserテーブルとUserProfileテーブルがある場合、すべての列をUserテーブルに配置するのではなく、それらを分割することです。

技術的には、すべての列の関係は1対1であるため、すべての列を1つのテーブルに配置できます。

UserProfileテーブルの場合、時間の経過とともにテーブルを変更して列を追加する必要があると誰かが言ったことは知っていますが、これがテーブルを分割する強力な理由ではないと思います。

したがって、UserテーブルとUserProfileテーブルを設計する場合は、1つのテーブルでそれを行う方がよいでしょうか。

0 投票する
2 に答える
868 参照

ms-access - データベースのシーケンシャルナンバリング(MSACCESS)

概要:

各レコードを識別するuique主キーを持つテーブルがあります。レコードを識別できるフィールドがさらに3つあります。

  • カテゴリー
  • カテゴリ番号
  • DuplicateNumber

新しいレコードを追加してカテゴリを選択した場合、重複しているかどうかに基づいて、CategoryNumberを正しくインクリメントするにはどうすればよいですか。

これは1つの大きなテーブルであることに注意してください。これは、ExcelからAccessへのアップグレードにすぎません。

tldr:

昨日、Accessで複数のキーを処理する方法について質問しました。私の問題は今日さらに不可解であるため、私は正しい質問をしなかったのかもしれません。

これが私がやろうとしていることと私が行き詰まっているところです。

私は、約15年前にさかのぼる、さまざまなカメラでさまざまなフィルムやフォーマットで撮影されたフィルム写真(写真ごとに合計18の異なる独立した情報)を追跡するためのデータベースを作成しています。数年前、私はデータをMS Excelに保存し、説明しようとしていることを実行するように入力フォームをプログラムしました。

私は2つの方法で写真を追跡したかった。1つ目は、ファイルにある写真の総数を知らせるマスター写真番号でした。それは私がそのシーケンスで何かを削除するつもりはなかったシーケンス番号でした。これは、各写真を一意に識別する番号になります。これは、データベース全体の主キーだと思います。

ただし、スライド、ネガ、OHPフィルムを一般的なグループやカテゴリに応じてファイリングして、写真を提出する必要がある場合や特定の何かを探している場合にすばやくプルできるようにしたかったのです。そこで、カテゴリ識別子も追加しました(たとえば、Landscapesには「LS」という名前が付けられているか、Sunsetsには「SS」などが付いています)。また、各カテゴリに含まれる各スライドの連続番号を保持したいと思いました。たとえば、データベース内の最初の写真の1つにPhotoID = 3、Category = LS、CategoryID = 1があります。さらに下に行くと、PhotoID = 14、Category = LS、CategoryID=2になります。

これらに加えて、追跡する必要のある別の番号があります。これは、同じシーンを重複して露光した場合です。これを機能させるために、各写真にDuplicateNumberを追加しました。重複がない場合、DuplicatNumberは0であり、DuplicateNumberが1、2重複、DuplicateNumberが2などよりも1つの重複がある場合。

そのため、ファイル内の写真を見つけるには2つの方法がありました。データベースではシーケンシャルであるが物理ファイルではシーケンシャルではないPhotoID、または写真を物理的にファイルする方法であるCategory、CategoryID、およびDuplicateNumberの組み合わせのいずれかによって。

Excelでフォームを開いたとき、最初にフォームのラジオボタンを使用して写真を配置するカテゴリを選択する必要がありました。次に、写真に関連するすべてのデータを入力します。フォームを実行すると、マスターシートの最後の番号が検索され、それがインクリメントされて、すべてのデータが新しいレコードに追加されます。次に、選択したカテゴリのカテゴリシートをアクティブにし、そのシートの最後の番号を決定し、それをインクリメントして、そこに新しいデータを追加します。

重要な注意点は、DuplicateNumberは、1、2などにしない限り、defalutによって常に0になることです。計算されることはありませんでしたが、入力しました。

スライドラベル(「レポート」)を作成したとき、メインのPhotoID、CategoryName、CategoryID、DuplicateNumberをこの形式(1LS1.0、14LS45.0、15LS45.1)で含め、さらに場所と撮影日を含めました。

しかし、今はもうExcelを使いたくないので、データベースをMSAccessに移行しようとしました。つまり、PhotoDetailsというメインテーブルが1つあります。

PhotoIDは、このテーブルの主キーです。これには、Categoryと呼ばれる別のテーブルと関係のある番号であるPhotoCategoryフィールドがあります。その主キーはPhotoCategoryIDであり、PhotoDetailsの外部キーでもあります。PhotoCategoryIDは、各カテゴリを識別する番号です。私のすべてのカテゴリーのリストでは、LSは11番です。しかし、ここで行き詰まります。

PhotoDetalテーブルには、各カテゴリの写真を識別する番号であるCategoryNumberと、重複の数を識別するDuplicateNumberがあります。新しい写真を追加するときに、CategoryNumberをインクリメントするにはどうすればよいですか?私が今持っているフォームでは、すべてのデータを入力できます。クリックして次のデータを入力すると、PhotoIDキーが自動的に入力されますが、CategoryNumberはどうでしょうか。各カテゴリーの最後の番号が何であるか思い出せないので、自分でその番号を入力します。すべてのデータを2回保存してExcelで行ったことを模倣しない限り、1回はPhotoDetails(Excelではマスターシート)に、もう1回は複数のカテゴリテーブルに保存します。Accessが回避策を提供してくれることを期待していました。

現在、私が持っている関係は、1-M関係でPhotoDetailsにリンクされているCategoryテーブルです。他にもいくつかのテーブルがすべて1-Mリレーションでリンクされています(たとえば、テーブルFilmは使用したさまざまなフィルムを格納し、1-Mリレーションを使用すると、どのフィルムを各スライドにリンクでき、他のほとんどのデータはその中に格納されます)仕方)。

私は31の異なるカテゴリーを持っています。各写真には、カテゴリ番号とカテゴリID番号、および重複番号があります。データ入力時にカテゴリとDuplicateNumberを選択しますが、CategoryID番号とPhotoIDを自動的にインクリメントしたいと思います。これを進める正しい方法は、Excelで行ったように、カテゴリごとに複製されないPhotoDetailテーブルを1つだけ保持する必要がある場合です。

0 投票する
3 に答える
8778 参照

xsd - XSD スキーマに外部キー タイプの関係を実装する

私はxmlスキーマに頭を悩ませようとしていますが、理解しようとしているのは、要素が別の、おそらく別のスキーマ全体を参照するリレーショナル型スキーマを行う方法です。xsd:key と xsd:keyref を見てきましたが、私が興味を持っているようなもののようですが、よくわかりません。最初に、xs:ID abd xs:IDREF というタイプの属性を設定しましたが、これは明らかに特定の要素を参照しているわけではありません。

基本的に、要素が同じファイルまたは他のファイル内の他の要素を参照するいくつかの異なるxmlファイルがあります。それは関係データベースによく似ており、私はそれを使用したいと思っていますが、要件は XML ファイルのみを使用することです。関係。小規模なプロジェクトでは機能しますが、スケーラブルではありません。

何かご意見は?

0 投票する
9 に答える
510 参照

sql - 位置クエリが悪いのはなぜですか?

私はCJデイトのSQLとリレーショナル理論:正確なSQLコードを書く方法を読んでいます、そして彼は位置クエリが悪いと主張します—例えば、これINSERT

代わりに、次のような属性ベースのクエリを使用する必要があります。

タプル(行)は順序付けられていない属性のセット(列)であるため、最初のクエリがリレーショナルモデルと一致していないことを理解しました。最初のクエリのどこに害があるのか​​理解できません。誰かが私にこれを説明できますか?

0 投票する
3 に答える
136 参照

php - MySQLが参加し、関係を「適切な方法」で出力する方法

まず第一に、私の貧弱なトピックのタイトルを失礼します。この質問をどのように作成するか、またはGoogleに何を求めればよいかわからないので、これが簡単に答えられるものである場合は、私を撃たないでください。

次のテーブルがあると仮定します。

[作成者]id、name

[ニュース]id、item、author_id

ニュースアイテムを表示し、対応する作成者(author_idに格納されている)を出力する場合は、次のクエリを実行します。

そして、このようなことをして出力します

ここで、$ obj-> nameには作成者の名前が含まれ、正常に出力されます。

では、代わりに「名前」フィールドが「アイテム」と呼ばれた場合はどうなりますか?明らかにいくつかの衝突があるでしょう。Propel&symfonyでの以前の経験では、getAuthorId()-> getName()のようなことをしますが、このプロジェクトでは、SQLを最初から作成する必要があります。