0

私は過去 1 時間の大部分をこのコードに目を通し、自分の失敗を理解しようとしていました。かなり明白かもしれませんが、コンピュータの前に長時間いると、コンピュータを飛び出させるためにもう 1 組の目が必要になるだけかもしれません。1NF と 2NF を維持するために複数のテーブルを接続していますが、つまずく 2 つのテーブルがあります。

my_contacts というメイン テーブルと、zip_code という州/市の情報を保持するテーブルがあります。zip_code は主キー行 'zip_code' を保持し、my_contacts はその外部キーを保持します。

問題は、参加しようとしても何も得られないことです。私はどこかで失敗しましたか?以下は、それぞれの SHOW CREATE TABLE です。

my_contacts の場合:

    CREATE TABLE `my_contacts` (
    `contact_id` int(11) NOT NULL AUTO_INCREMENT,
    `last_name` varchar(100) DEFAULT NULL,
    `first_name` varchar(100) DEFAULT NULL,
    `phone` varchar(13) DEFAULT NULL,
    `email` varchar(100) DEFAULT NULL,
    `gender` char(1) DEFAULT NULL,
    `birthday` date DEFAULT NULL,
    `prof_id` int(11) DEFAULT NULL,
    `zip_code` int(11) DEFAULT NULL,
    PRIMARY KEY (`contact_id`),
    KEY `mc_profid_fk` (`prof_id`),
    KEY `my_zip_fk` (`zip_code`),
    CONSTRAINT `mc_profid_fk` FOREIGN KEY (`prof_id`) 
    REFERENCES `profession` (`prof_id`),
    CONSTRAINT `my_zip_fk` FOREIGN KEY (`zip_code`) REFERENCES `zip_code` (`zip_code`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

zip_code:

    CREATE TABLE `zip_code` (
    `zip_code` int(11) NOT NULL AUTO_INCREMENT,
    `city` varchar(50) DEFAULT NULL,
    `state` char(2) DEFAULT NULL,
    PRIMARY KEY (`zip_code`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

前もって感謝します。

4

1 に答える 1

1

表のは auto_increment に設定されていますzip_codezip_code

これは、そのテーブルのこのフィールドに適しているとは思えません。実際にどこに保管していzip_codeますか?ちなみに、実際の郵便番号は先頭の 0 を処理するために文字列として格納されると思います。郵便番号は数字のように見えるかもしれませんが、実際には 1 つではありません (順序はあまり明確に定義されておらず、算術演算は意味をなさない)。

于 2013-04-02T23:40:53.513 に答える