2016-05-30 32 views
0

すべての外部キーを主キーとリンクする際に問題があります。私は2つのテーブルを持っている:MySql外部キー主キーが一致しません

CREATE TABLE Patients 
     (pid  INT NOT NULL AUTO_INCREMENT, 
     name  VARCHAR(25), 
     address  VARCHAR(30), 
     telephone VARCHAR(10), 
     care_centre_id INT, 
CONSTRAINT Patients_PK PRIMARY KEY (pid)); 

CREATE TABLE Care_centres 
     (cid  INT NOT NULL AUTO_INCREMENT, 
     name  VARCHAR(25), 
     location  VARCHAR(30), 
     nurse_charge_id INT, 
CONSTRAINT Care_centres_PK PRIMARY KEY (cid)); 

ALTER TABLE Patients ADD FOREIGN KEY (care_centre_id) REFERENCES Care_centres(cid); 

CIDはCare_centresテーブルの主キーである、とcare_cente_idは、患者テーブルの外部キーです。クエリテーブル(MySql)を実行するたびに、外部キーにNULL値が表示されます。どのように私はプライマリキーと外部キーの対応付けをインデックスすることができます、それは外来のキーに値をランダムに割り当てられることはOKです。

mysql> SELECT * FROM Patients; 
+-----+--------+----------------+------------+----------------+ 
| pid | name | address  | telephone | care_centre_id | 
+-----+--------+----------------+------------+----------------+ 
| 1 | Joe | 8 Walker Road | 7800921111 |   NULL | 
| 2 | Jose | 10 Runner Road | 7800922222 |   NULL | 
| 3 | Joseph | 12 Jogger Road | 7800923333 |   NULL | 
+-----+--------+----------------+------------+----------------+ 

ありがとうございました。

+1

FKを指定しただけでも、mysqlがそれらの値を魔法のように埋め込むことはできません。 'care_center_id'をnullにすることができるので、mysqlは' care_centers'に一致する親レコードを持つ必要はありません。 –

+0

お世話になりました!私は今それを得たと思う。 –

答えて

0

患者テーブルに行を挿入するときに、care_centre_idカラムを指定して、その患者と指定されたケアセンターとの関連付けを作成する必要があります。さもなければ、データベースはどの患者がどのケアセンターに属しているかを知る方法がない。

したがって、たとえば、あなたは、このようなケアセンターを持っているとしましょう:

+-----+--------+----------------+------------+ 
| cid | name | location  | nurse_charge_id | 
+-----+--------+----------------+------------+ 
| 1 | centre1| someplace  | 1    | 
| 2 | centre2| someplace else | 1    | 

あなたは、例えば、CENTR 2

+-----+--------+----------------+------------+----------------+ 
| pid | name | address  | telephone | care_centre_id | 
+-----+--------+----------------+------------+----------------+ 
| 1 | Joe | 8 Walker Road | 7800921111 |   1 | 
| 2 | Jose | 10 Runner Road | 7800922222 |   1 | 
| 3 | Joseph | 12 Jogger Road | 7800923333 |   2 | 
を気にするセンター1とヨセフを気にするジョーとホセを割り当てることができます

これは、患者の最初の挿入時またはその後の更新時に行います。

関連する問題