これが私の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 ;
システムはusernameを使用してユーザーにログインします。ログインに電子メールを使用するように変更したいのですが。しかし、usersテーブルにemail_addressはありません。
私は外部キーを追加しました - userテーブル(contact_infoのemail_address)にemail。
データベースに問い合わせるにはどうすればいいですか?
いやいやいやいやいや。真剣に、いいえ。私をあそこにやらせて叩かせてはいけません:-)
電子メールアドレスを2回保存することで、3番目の正規形を破っています。
関係は短い関係であれば十分です。id
。 2つのテーブルでIDが同じになることを保証していないと仮定します(つまり、users.id
必ずしも私と同じではありませんcontact_info.id
)、ちょうど追加ci_id
にusers
への外部キーとして機能するテーブル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;
ちなみに、Community-Wikiに関する質問はこのようにする必要はありません。これらはSO上では完全に適切であり、担当者が関わっていればおそらくより多くの回答が得られるでしょう。担当者がいなくても私をやめることはできません。私は人々に何をすべきかを教えるのが好きだから、ここにいるだけです。意欲的な妻と6歳未満の子供2人がいる家庭ではかなり難しいです:-)