2016-07-21 4 views
0

mysqlのDBMSは、私は私がこれはmysqlの1対1リレーションテーブルを作成するための良い習慣ですか?</p> <p>を使用

create table customer_add 
(hno int , 
block_name varchar(3), 
street_no int, 
town varchar(20), 
state varchar(20), 
cust_id int unique, 
primary key(hno), 
foreign key(cust_id) references winecustomer(id)); 

がある顧客テーブルからユニーク外部キー(id)を作っています別のテーブルのアドレスを作る今顧客テーブル

create table customer 
(id int , 
name varchar(3), 
primary key(id)); 

を作成しましたこれは間違った方法ですか?もしそうなら、私は1対1の関係を作るべきですか? は、onetoone、onetomany、manytomany以外の関係はありますか?

+0

あなたが何かに圧倒的な理由がない限り(例えば、あなたがそれを変更している間にダウンタイムに耐えられない大量のテーブルや、mysqlの最大コラム/テーブル制限に遭遇した場合)、まっすぐな1: 1テーブル。 –

+0

@MarcBええ、私は1:1の必要性がありますが、顧客アドレステーブルがxyzの理由のために別途必要であると想像しているので、このアプローチは正しいですか? – ekaf

+0

限り、FKだけが一方的に行くことを覚えている限り。 custom_addレコードを削除して、そのレコードを "twin"なしで顧客に残すと、それは役に立ちません。 –

答えて

0

ERD(エンティティリレーションシップダイアグラム)に基づいて、1対1の関係が存在します。ただし、テーブルを作成するときに、どちらが他のテーブルのプライマリキーを取得するかを選択するため、外部キーになります。 ERDでは、どちらが他のテーブルの主キーを持つべきかを決定することもできます。

例: 従業--- 1 -----(持っている)---- 1 ---(マネージャー)ここでは、1人の従業員が1つのマネージャを持っており、管理者は1人の従業員を持っていると言う

。従業員がEmployee_SSN属性を持っているとし、Managerテーブルの中でEmployee_SSNを従業員テーブルを参照する外部キーとして取ることができます。または、ManagerにM_SSNがあるとすると、EmployeeはM_SSNをManagerテーブルを参照する外部キーとして受け取ります。しかし、そのうちの1つにFULL/Total参加があった場合、そのテーブルは他のテーブルの主キーを受け取ります。 1対1の関係を持つことはまったく問題ありません(1対1の関係はERDでより簡単で分かりやすくなります)。