0

私は課題を取り組んでいます。私は主にすでに作成されたテーブルを使って作業するので、私はSQLの基本を少し錆びます。私はデータベースモデルを与えられ、それを作成するように求められました。私はモデルにエラーがあり、それらを修正するかもしれないと言われました。ここで私が問題を抱えています一部の抜粋です:他のテーブルからのプリミティブキーで構成される複合プライマリキー

http://i.imgur.com/0KyMquZ.jpg

が、私はそれを理解しようとしてグーグルと研究してきましたが、私は届かない何かがあるのならば私はよく分かりませんモデルを調整する必要があります。私が抱えている問題は、operationテーブルと接続テーブルです。 operationの主キーは、接続テーブルの3つの主キーともう1つの主キーdateで構成されています。それはできますか?彼らが他のテーブルの外来キーだったら、私はそれを理解することができると思う。私はそれを行う方法を理解しようとしてきましたが、主にこれが何を示しているかの概念を頭で囲んでいます。私はちょうどその理由や理由を理解していません。コンポジット・プライマリ・キーが他の3つのテーブルになければならないのではないでしょうか?複合主キーが他のテーブルの外部キーを参照してはいけませんか?私はちょうど本当に混乱しています。私はデータベースで作業していますが、設計するのは大丈夫です。

私は教授にそれについて尋ねるだけですが、私たちは決して同じページにいません。私は彼を現時点で理解していると思うし、もっと混乱してしまいます。私はそれが重要だとは思わないが、それはMySQLだ。

+0

あなたの質問が正確にわかりますか? –

+0

私は、複合主キー参照の主キーを別のテーブルに見たことがありません。それはモデルの間違いですか?私はそれをする方法を理解しようとしましたが、それを得ることはできません。私は本当にコンセプトの周りに頭を浮かべることさえできません。 – user2328273

+1

モデルは 'operation'に関してうまく見えます。各レコードは3つの関連テーブルのキーと日付の組み合わせとしてのみ存在します。したがって、それらは外部キーですが、一緒になって複合主キーになります。唯一の欠陥は、同じ手術名が同じ患者の同じ医師によって同じ日に複数回実行される可能性があるが、それは問題ではないと推測される場合である。 –

答えて

0

コメントを読んだ後、私は誤解を理解するようになりました。私は主複合キーが主キーで構成され、他のテーブルと重複していると考えていました。複合主キーが外国語のキーと1つの主キー:日付で構成されていることに気づきました。説明をありがとう。

0

コンポーネントのいくつかがFKでも宣言されている複合PKを宣言することには問題ありません。論理的には、これはかなり正しいです。

パフォーマンスへの影響を予測することは難しいでしょう。 MysqlがPK宣言に基づいて構築するインデックスは予測が難しいでしょう。一部のクエリは高速化され、他のクエリは高速化されません。

+0

しかし、コンポーネントは外部キーではなく、別のテーブルの主キーです。それは私が理解していないものです。 – user2328273

+0

値がすべて何らかのPKを参照する場合、それらは定義によってFKです。このスコアには多少の混乱があります。多くのコントリビュータは、FK制約で名前が付けられている場合にのみ、FKとして列を参照します。 –

+0

さて、「医者」、「患者」、「操作タイプ」のテーブルの主キーは何ですか?私はそんなことを考えていた。私はモデルを理解できません。私は間違いを修正するように言われましたが、モデルの意図を理解して修正するのに十分なデータベース設計経験がありません。 – user2328273

1

技術的には許容されていますが、この場合、次のような状況が存在するため、意味的に意味がないと思います。

  1. 患者は、患者が同じで、同じ日に複数回同じ操作の対象にすることはできません
  2. 異なる医師が複数回同じ日に同じ操作の対象となりますが、...することができます医者ですが、...
  3. 患者は、同じ日に同じ医師から異なる操作を受けることがあります。

私にとっては、このプライマリキーはナンセンスであり、合成プライマリキーを追加して、必要に応じてこれらの単純な外部キー列を作成することもできます。

関連する問題