4

MS SQL Server 2012を使用しています。2 つのテーブルがあり、1 つは医師用、もう 1 つは手術センター用です。各テーブルには現在、医師や手術センターがレポート (電子メール、ファックスなど) を受け取る方法を説明する列が含まれています。両方のテーブルでこのデータを保持する列は同一です。各テーブルから配送方法の列を取り出して共通の配送方法テーブルを作成することを考えていますが、各行に医師と手術センターの両方の外部キーが必要です。配送方法と医師は1対1の関係なので面倒です。これと同じ関係が手術センターのテーブルにも存在します。

質問:

  1. 2 つの外部キーを持つテーブルを用意し、そのうちの 1 つを常に null にすることは良い習慣ですか?
  2. そのような場合に対処するための最善の戦略は何ですか。

医師と手術センターのテーブルから配信方法の情報を取得したい理由は、テーブル全体のサイズを小さくするためです。また、これにより、データがより適切に正規化されます。すべてのヘルプとガイダンスに感謝します。

4

4 に答える 4

1

DeliveryMethod テーブルを 1 つにすることが考えられます。このテーブルの各レコードには ID (おそらくサロゲート - 例: Identity または Sequence) があります。次に、Doctor テーブルには DeliveryMethodID 外部キーがあり、同様に SurgeryCenter テーブルには DeliveryMethodID 外部キーがあります。

通常のデータベース設計では、2 つの同一のテーブルは必要ありません。テーブルのサイズが問題になる場合は、partitioned table.

于 2013-01-17T04:42:52.070 に答える
0

可能な代替設計は次のとおりです。

  • 表 'DeliveryMethods': 列 ID (PK)、Fax_number、Email_Address、Preferred、...
  • 表 'SurgeryCentres': 列 SC_ID (PK)、名前、...、DeliveryMethodID (DeliveryMethods を参照する FK)、...
  • テーブル '医師': 列 MD_ID (PK)、名前、...、DeliveryMethodID (DeliveryMethods を参照する FK)、...

これにより、null は回避されますが、正規化されたデータが得られます。

于 2013-01-17T04:43:18.787 に答える
0

1 つのオプションは、テーブルの PK をおよびテーブルにリンクする 2 つの中間テーブルを用意DeliveryMethodすることです。DoctorsSurgeryCenterDoctorDeliveryMethodDoctor.idDeliveryMethod.id

ただし、これには、それぞれのメソッドを取得するために 3 つのテーブルを結合する必要があります。もう 1 つはDeliveryMethod.id、 をテーブルの列にリンクしてDoctor、 と呼びますDeliveryMethodID。いずれにせよ、簿記を行う必要があります

于 2013-01-17T04:41:29.023 に答える
0

dr/center から配信方法ではなく、配信方法から dr/centers への関係があります。

この関係を逆にすると、unsed の可能性がある列をテーブルに含める必要がなくなるだけでなく、複数の dr およびセンター間で配信方法を共有できます。あなたは 1 対 1 の関係があると言っていますが、dr または center が他の dr または cent と同じ配送方法を持つことを防止するビジネス ルールがない場合、実際には多対 1 の関係があります (多くの dr/センターが同じ配信方法を持つことができます) 実際にはそれが一意であっても。

于 2013-01-17T05:57:53.043 に答える