3

これが私の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つのEメールアドレスを持ちたいですか?それとも2つのテーブルの間の一対多の関係ですか? - 2ndkauboy

1 답변


12

いやいやいやいやいや。真剣に、いいえ。私をあそこにやらせて叩かせてはいけません:-)

電子メールアドレスを2回保存することで、3番目の正規形を破っています。

関係は短い関係であれば十分です。id。 2つのテーブルでIDが同じになることを保証していないと仮定します(つまり、users.id必ずしも私と同じではありませんcontact_info.id)、ちょうど追加ci_idusersへの外部キーとして機能するテーブル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人がいる家庭ではかなり難しいです:-)


  • @ KPL、「うーん。このボタンの機能がわからないので、ボタンを押して「」を参照してください。私のテスターの一人としてあなたを愛したいのですが、私のユーザーの一人としてではありません:-) - paxdiablo

リンクされた質問


関連する質問

最近の質問