mysql:3つのパターン
1929 ワード
第1パターン
原子性テーブルのタプルをより小さなタプルに分割することはできません.
だいにパターン
非プライマリ・キーは、プライマリ・キーの一部だけに依存するのではなく、プライマリ・キーに完全に依存する必要があります.
例えば、米国が軍火を販売する際、武器ごとに国や地域によって価格が異なる.表を作ってみましょう.
weapon_priceは武器の価格を記述するために用いられ、価格は(武器、消費者)によって異なる.このテーブル(wp_id,cs_id)は、そのプライマリ・キーです.そのうちwp_priceは(wp_id,cs_id)に完全に依存し、cs_nameはcs_にのみ依存するid、すなわち、プライマリ・キーの一部にのみ依存する.
このような状況による問題は何ですか.増加:冗長性をもたらします.cs_nameが繰り返され、多くの武器の買い手が台湾であればcs_nameはこの表に何度も登場し、無駄になります. 削除: なし変更:「フィリピン」が後に改名された場合、データベース管理者はテーブル内のすべての関連csを変更しなければなりません.nameは全部直します. 調べ: なし
どのように対応しますか?
cs_をnameは別の表に移動して、もともと、データベースを学んだことがある人はすべて知っていて、1つのconsumer表を建てることができて、その中に(cs_id、cs_name)の2つのメタグループが含まれています.
だいさんパターン
第2のパターンを満たし、各メタグループはプライマリ・キー列に依存することを伝達しない.
上記の2枚の表はいずれも第2のパターンを満たしているがcity表のpr_nameメタグループはct_に完全に依存するがidですがpr_を通りますid伝達はct_に依存するidの.
依存を伝えるデメリット:増:明らかpr_nameに冗長性が現れます. 削除: なし改:provinceテーブルのprを変更するnameメタグループ、cityテーブルのpr_も同時に変更name .うっかりすると問題が発生する. 調べ: なし
締めくくり
普段はふざけてもパターンが使えないようですが、デザインされた表はいつも自然にパターンの要求を満たしているからです.でも、お手本には、万歳を「理解」しましょう~
原子性テーブルのタプルをより小さなタプルに分割することはできません.
だいにパターン
非プライマリ・キーは、プライマリ・キーの一部だけに依存するのではなく、プライマリ・キーに完全に依存する必要があります.
例えば、米国が軍火を販売する際、武器ごとに国や地域によって価格が異なる.表を作ってみましょう.
CREATE TABLE weapon_price
(
wp_id UNSIGNED INT NOT NULL AUTO_INCREMENT, --
cs_id UNSIGNED INT NOT NULL , -- id
wp_price UNSIGNED INT NOT NULL, -- ,
cs_name VARCHAR(40) NOT NULL -- , / /
);
weapon_priceは武器の価格を記述するために用いられ、価格は(武器、消費者)によって異なる.このテーブル(wp_id,cs_id)は、そのプライマリ・キーです.そのうちwp_priceは(wp_id,cs_id)に完全に依存し、cs_nameはcs_にのみ依存するid、すなわち、プライマリ・キーの一部にのみ依存する.
このような状況による問題は何ですか.
どのように対応しますか?
cs_をnameは別の表に移動して、もともと、データベースを学んだことがある人はすべて知っていて、1つのconsumer表を建てることができて、その中に(cs_id、cs_name)の2つのメタグループが含まれています.
だいさんパターン
第2のパターンを満たし、各メタグループはプライマリ・キー列に依存することを伝達しない.
CREATE TABLE province
(
pr_id UNSIGNED INT NOT NULL AUTO_INCREMENT, --
pr_name VARCHAR(20) NOT NULL, -- , , pr_id , pr_name
PRIMARY KEY(pr_id)
);
CREATE TABLE city
(
ct_id UNSIGNED INT NOT NULL AUTO_INCREMENT, --
ct_name VARCHAR(20) NOT NULL, -- ,ct_id ,ct_name
pr_id UNSIGNED INT NOT NULL , -- ,ct_id , pr_id
pr_name VARCHAR(20) NOT NULL, -- ,ct_id , pr_name
PRIMARY KEY(ct_id),
FOREIGN KEY(pr_id) REFERENCES province(pr_id) ON DELETE CASCADE
);
上記の2枚の表はいずれも第2のパターンを満たしているがcity表のpr_nameメタグループはct_に完全に依存するがidですがpr_を通りますid伝達はct_に依存するidの.
依存を伝えるデメリット:
締めくくり
普段はふざけてもパターンが使えないようですが、デザインされた表はいつも自然にパターンの要求を満たしているからです.でも、お手本には、万歳を「理解」しましょう~