0

Jersey を使用して、NetBeans 7.3 に RESTful Web サービスを配備しています。Glassfish 3.1.2 と MySQL データベースのデータを使用しています。ここで、 Basic-Authenticationを構成したいと思います。

次のように、データベースに 3 つのテーブルのみを使用して、最初にいくつかのチュートリアルに従いました

そしてすべてうまくいきました。しかし今、それを自分のDBに適用したいと思います。テーブルは特定の規則に従わなければなりませんよね?groupslogin_groupsの2 つの新しいテーブルを作成しようとしています(チュートリアルと同じですが、チュートリアルで「users」という名前のテーブルは、既に存在する「 login 」という名前のテーブルです)。しかし、テーブル login_groups と login の間に外部キーを作成できません。login_groups と groups の間に既に作成していますが、問題はありませんでした。

ここに私のコード表があります:

テーブルログイン:

  CREATE TABLE `login` (
  `id` mediumint(8) NOT NULL AUTO_INCREMENT,
  `login` varchar(100) COLLATE utf8_bin NOT NULL,
  `password` varchar(32) COLLATE utf8_bin NOT NULL,
  `privileges` enum('system','installer','administrator') COLLATE utf8_bin NOT NULL,
  `secret_id` varchar(32) COLLATE utf8_bin NOT NULL,
  `User_id` mediumint(8) unsigned NOT NULL,
  `isLogged` bit(1) NOT NULL,
  `Language` enum('Portuguese','English') COLLATE utf8_bin NOT NULL,
  `deleted` bit(1) NOT NULL,

  PRIMARY KEY (`id`),
  UNIQUE KEY `secret_id_UNIQUE` (`secret_id`),
  KEY `fk_Login_User1` (`User_id`),
  CONSTRAINT `fk_Login_User1` FOREIGN KEY (`User_id`) REFERENCES `user` (`id`) 
  ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

テーブルグループ:

 CREATE  TABLE IF NOT EXISTS `lul`.`groups` (
`group_id` MEDIUMINT(8) NOT NULL ,
`group_name` VARCHAR(45) NOT NULL ,
`group_desc` VARCHAR(45) NULL DEFAULT NULL ,

PRIMARY KEY (`group_id`) )
ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;

テーブルlogin_groups :

  CREATE  TABLE IF NOT EXISTS `lul`.`login_groups` (
  `login_id` MEDIUMINT(8) NOT NULL ,
  `group_id` MEDIUMINT(8) NOT NULL ,

  PRIMARY KEY (`login_id`, `group_id`) ,
  INDEX `fk_login` (`login_id` ASC) ,
  INDEX `fk_groups` (`group_id` ASC) ,
  CONSTRAINT `fk_login`
  FOREIGN KEY (`login_id` ) REFERENCES `lul`.`login` (`id` )
  ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_groups`
  FOREIGN KEY (`group_id` ) REFERENCES `lul`.`groups` (`group_id` )
  ON DELETE NO ACTION ON UPDATE NO ACTION)

ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin

テーブル login_groups と login の間に外部キーを作成しようとすると、MySQL で発生するエラーは次のとおりです。

サーバーで SQL スクリプトを実行しています エラー: エラー 1005: テーブル 'lul.login_groups' を作成できません (errno: 150)

外部キーを個別に作成しようとしましたが、2 つ目のキーを作成できたことに注意してください。

私が間違っていることを知っていますか?または、基本認証にテーブルを使用する別の方法を知っていますか?

ありがとうございました

4

1 に答える 1

0

そこで、MySQL のコピーを使用して SQL を実行しましたが、唯一のエラーはCREATE TABLE loginスクリプトにありました。のテーブルへの参照が気に入らなかっuser

CONSTRAINT `fk_Login_User1` FOREIGN KEY (`User_id`) REFERENCES `user` (`id`)
ON DELETE NO ACTION ON UPDATE NO ACTION

あなたはすでに他の場所で定義していると思いますか?

table ではまったく問題ありませんlogin_groups。データを含む既存のテーブルを変更しようとしていますが、そのデータは必要な制約のいずれかに違反していますか [別のテーブルで参照されている ID がそのテーブルで定義されていません]?

于 2013-03-09T21:28:33.220 に答える