のは、我々は次のエンティティを持っているとしましょう:この単純な世界ではダイヤモンドスキーマ:どのように正規化されていますか?
- 制作スタジオ
- ジャーナリスト
- カメラオペレーター
- ニュース映像
、制作スタジオは、多くのジャーナリストや多くを持っていますカメラオペレータ。各ジャーナリストは正確に1つのスタジオに属します。オペレーターと同じこと。 1人のジャーナリストと1人のオペレータがニュース映像を制作します。どちらも同じスタジオから来ています。
はここでリレーショナルデータベースにこのモデルを置くために私の単純なアプローチです:
CREATE TABLE production_studios(
id SERIAL PRIMARY KEY,
title TEXT NOT NULL
);
CREATE TABLE journalists(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
prodution_studio_id INTEGER NOT NULL REFERENCES production_studios
);
CREATE TABLE camera_operators(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
production_studio_id INTEGER NOT NULL REFERENCES production_studios
);
CREATE TABLE news_footages(
id SERIAL PRIMARY KEY,
description TEXT NOT NULL,
journalist_id INTEGER NOT NULL REFERENCES journalists,
camera_operator_id INTEGER NOT NULL REFERENCES camera_operators
);
このスキーマフォームうまく形のダイヤモンドERDといくつかの質問。
ニュースの映像は、異なる制作スタジオから来たカメラオペレーターと一緒にジャーナリストをリンクすることができます。対応する制約を記述することでこれが解決できることを理解していますが、実験のために、標準フォームデータベース設計でエクササイズを行っているようです。
最初の質問は、用語についてです:このスキーマが非正規化であると述べるのは正しいですか?はいの場合は、どの通常のフォームが壊れますか?または、レコード間の冗長性、マルチパス関係など、この異常の名前がありますか?
このスキーマを記述して、異常を説明する方法を変更する方法はありますか?
もちろん、この特定の問題に取り組んでいる論文を参考にしていただければ幸いです。
あなたは完璧な点を作っています。確かに私は人と彼/彼女の役割を見逃してしまった。 –
あなたは完璧な点を作っています、ありがとう。確かに私は人と彼/彼女の役割を見逃してしまった。しかし今、ジャーナリストがスタジオに所属する唯一の方法は、オペレータとチームを形成することです。ジャーナリスト(およびオペレータ)がスタジオ(私の例ではFKsによって表現された)によって雇用されているとしましょう。この新しいスキーマを考えると、特定のスタジオで採用されているジャーナリストを見つけるにはどうすればいいですか? –
@SergeBalyuk:私の修正された答えを見てください。 –