这是我的USER
表
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL, `expiry` varchar(6) NOT NULL, `contact_id` int(11) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(100) NOT NULL, `level` int(3) NOT NULL, `active` tinyint(4) NOT NULL DEFAULT '1', PRIMARY KEY (`id`,`email`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
这是我的contact_info表
CREATE TABLE IF NOT EXISTS `contact_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `email_address` varchar(255) NOT NULL, `company_name` varchar(255) NOT NULL, `license_number` varchar(255) NOT NULL, `phone` varchar(30) NOT NULL, `fax` varchar(30) NOT NULL, `mobile` varchar(30) NOT NULL, `category` varchar(100) NOT NULL, `country` varchar(20) NOT NULL, `state` varchar(20) NOT NULL, `city` varchar(100) NOT NULL, `postcode` varchar(50) NOT NULL, PRIMARY KEY (`id`,`email_address`), ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
系统使用用户名登录用户。我想以一种使用电子邮件登录的方式对其进行修改。但是用户表中没有email_address。
我在用户表中添加了外键 - 电子邮件(在contact_info中是email_address)。
我该如何查询数据库?
答案 0 :(得分:12)
不,不,不,不。说真的,没有。不要让我过来: - )
您通过存储两次电子邮件地址来破坏第三范式。
这种关系只需要很短,即id
。假设您不保证两个表中的ID相同(即,我的users.id
不一定等于我的contact_info.id
),只需向{ci_id
添加users
即可。 1}}表用作contact_info
表的外键。
然后,获取用户的username
和email
的查询将类似于:
select u.username, ci.email
from users u, contact_info ci
where u.username = 'paxdiablo'
and u.ci_id = ci.id;