0

次の関係があるとします。

患者が医師を決定し、病院が医師を決定し、医師が病院を決定します。これをどのように BCNF に分解しますか?

{医師患者}、{患者病院}または

{医師、病院}、{患者病院}または

{医師、病院}、{医師、患者}

関係の私の理解では、それは 3NF である必要があり、X → Y が R で成立する場合、関係の依存関係ごとに次のいずれかが成立する必要があります。

{医師、病院}、{医師、患者}が正しい選択でしょうか?

4

1 に答える 1

1

まず、あなたは数字を誤解していると思います。ここで使用される表記は、通常、次の 2 つの機能依存関係を説明するものとして解釈されます。

Patient, Hospital → Doctor   (1)
Doctor → Hospital            (2)

機能的依存関係 (1) は、特定の病院の各患者に固有の医師が割り当てられることを意味し、(2) 各医師は固有の病院で働くことを意味します。代わりに、あなたの解釈では、各病院が独自に医師を決定します。つまり、どの病院にも医師は 1 人しかいないということです。

では、上記の解釈を踏まえて、その関係が BCNF にあるかどうかを見てみましょう。各行列式が (スーパー) キーであり、明らかに依存関係がある場合、関係は BCNF にあります。

Doctor → Hospital

Doctor はスーパーキーではない (つまり、すべての属性を決定するわけではない) ため、この条件に違反します。実際、この関係には、(患者、病院) と (患者、医師) という 2 つの候補キーがあります。

したがって、BCNF でのこの関係の分解は次のようになります。

R1 <(Doctor, Hospital), { Doctor → Hospital }>

R2 <(Doctor, Patient), { }>

(したがって、あなたの推測は正しいです)。

ただし、この分解には不快な性質があることに注意してください: 関数の依存関係が失われます! 実際、依存関係は次のとおりです。

Patient, Hospital → Doctor

失われます。つまり、結果のデータベースでは強制できません。これは、患者がいる病院にいない医師の患者に関する情報を挿入できることを意味します。

最後に、Doctor は主要な属性 (つまり、候補キーに属する) であるため、最初の関係は既に 3NF にあることに注意してください。

于 2016-04-10T22:22:58.927 に答える