為什麼需要外來鍵?

2021-09-26 05:03:40 字數 4011 閱讀 5416

1.如何將京東fuliuqingfeng的使用者資訊及其多個郵寄商品位址儲存到資料庫中?

values ('51b28fe1-4ebf-41ac-a17b-d5e276861fd0','fuliuqingfeng','123456','張三','18920120206','河南安陽');

insert into user_info (id,user_name,password,real_name,mobile,address)

values ('cc95772b-75a2-4702-bd99-4c3b0322d606','fuliuqingfeng','123456','李四','18617297545','北京海淀');

insert into user_info (id,user_name,password,real_name,mobile,address)

values ('c63028fd-cf8d-4dac-a278-b5cc8fd61e3c','fuliuqingfeng','123456','王五','17694976949','山西大同');

這種表結構存在嚴重的字段冗餘(user_name和password列),如果個人資訊字段比較多這一問題表現的越嚴重,多餘的重複、囉嗦的資訊太多。

values ('bfb9472a-7911-4e6f-a479-3b719454ebab','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','張三','18920120206','河南安陽');

insert into address (id,user_info_id,real_name,mobile,address)

values ('5227c6b9-45a2-44aa-8ac0-1f63a38d3b65','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','李四','18617297545','北京海淀');

insert into address (id,user_info_id,real_name,mobile,address)

values ('30b8584b-aa6a-4516-a623-03f487058586','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','王五','17694976949','山西大同');

問題:

1)這種表結構消除了字段重複,但由於只是邏輯上的「外來鍵」關係,所以依然無法保證資料完整性,

2)例如可以將user_info中id為51b28fe1-4ebf-41ac-a17b-d5e276861fd0的資料刪除,但此時位址表中資料將不再完整——找不到這些位址屬於哪個使用者;

3)再例如也可以向address表中新增一條user_info_id不存在的位址資訊(如:insert into address (id,user_info_id,real_name,mobile,address) values (『7da42cc6-36a6-4ad5-9998-71dbc30c8e17』,『ddc376dd-f8b3-42a6-b42a-db22abed1941』,『xiaowang』,『18338970095』,『北京東城區』);)——同樣,該條資料並不完整,依然找不到這些位址屬於哪個使用者。

values ('bfb9472a-7911-4e6f-a479-3b719454ebab','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','張三','18920120206','河南安陽');

insert into address (id,user_info_id,real_name,mobile,address)

values ('5227c6b9-45a2-44aa-8ac0-1f63a38d3b65','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','李四','18617297545','北京海淀');

insert into address (id,user_info_id,real_name,mobile,address)

values ('30b8584b-aa6a-4516-a623-03f487058586','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','王五','17694976949','山西大同');

這種方案為user_info_id新增了外來鍵,

指向user_info表的主鍵,該約束起到了保護資料完整性的作用:如果刪除的使用者資訊id已經在address表中使用,則該條資料無法刪除;無法向address表中新增使用者id不存在的位址資訊。

為什麼需要外來鍵

例如 如何將乙個使用者的使用者資訊及其多個郵寄商品位址儲存到資料庫中?資料特點 有較多的冗餘資料,即賬戶和密碼相同其他資訊有差別 方案一 create table user info 建立共享資訊 id char 36 primary key,id資訊為主鍵 user name varchar 30...

為什麼需要外來鍵

生活中例子的引入 如何將京東fuliuqingfeng的使用者資訊及其多個郵寄商品位址儲存到資料庫中?第一種方法是逐條輸入資料 create table user info id char 36 primary key,user name varchar 30 not null,password v...

為什麼需要外來鍵

情景 create table user info id char 36 primary key,user name varchar 30 not null password varchar 30 not null real name varchar 8 mobile char 11 address...