假設(shè)有一個(gè)需求是用戶給評(píng)論點(diǎn)贊,數(shù)據(jù)庫(kù)設(shè)計(jì)是三張表,用戶表t_user,評(píng)論表t_comment,點(diǎn)贊表t_praise,其中點(diǎn)贊表中有兩個(gè)外鍵分別是user_id和comment_id,分別關(guān)聯(lián)用戶表的用戶id和評(píng)論表的評(píng)論id,然后規(guī)定一個(gè)用戶只能給同一條評(píng)論點(diǎn)贊一次,有一種實(shí)現(xiàn)方式就是在插入點(diǎn)贊表之前,先通過(guò)user_id和comment_id查詢是否有點(diǎn)贊記錄,如果沒(méi)有的話,再執(zhí)行插入操作,否則返回您已經(jīng)點(diǎn)過(guò)贊了.這樣實(shí)現(xiàn)的話就會(huì)多一次數(shù)據(jù)庫(kù)查詢操作.更好的實(shí)現(xiàn)是,修改點(diǎn)贊表的user_id和comment_id為唯一約束,即這兩列不能同時(shí)相同,這樣在執(zhí)行插入操作的話,如果已經(jīng)點(diǎn)過(guò)贊了,數(shù)據(jù)庫(kù)會(huì)拋出違反了唯一鍵約束,這樣的話,就可以避免多一次數(shù)據(jù)庫(kù)查詢操作了.具體設(shè)置多列為唯一約束的語(yǔ)句是(注意斜體語(yǔ)句):
CREATE TABLE t_praise (
id int(12) unsigned NOT NULL AUTO_INCREMENT,
comment_id int(12) NOT NULL,
user_id int(12) NOT NULL,
KEY FK_t_praise_comment (comment_id),
KEY FK_t_praise_user (user_id),
UNIQUE KEY UK_praise (comment_id,user_id)
)