0

私はMySQLとデータベース構造にかなり慣れていないので、このデータベースを設計するための最良の方法を誰かが手伝ってくれるかどうか疑問に思いました。アプリケーションは本質的にオンライン練習帳です。学生が完了し、結果をデータベースに保存するための演習があります。

親は子供の回答を表示でき、教師はクラス全体の結果を表示できます。

Teachers、、Parentsの3種類のユーザーがいますStudents。各生徒は親にリンクされており、各生徒はクラスにリンクされています。教師は複数のクラスにリンクされています。

私の現在のユーザーの構造はここで見ることができます。

ここに画像の説明を入力してください

単一のUsersテーブルを作成し、UserTypeフィールドを作成する必要がありますか?もしそうなら、どうすれば生徒をクラスと保護者にリンクさせることができますか?

4

2 に答える 2

1

このためのスキーマを作成しました:-

DROP TABLE IF EXISTS `class`;

CREATE TABLE `class` (
  `class_id` int(11) NOT NULL AUTO_INCREMENT,
  `class_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`class_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

/*Data for the table `class` */

insert  into `class`(`class_id`,`class_name`) values (1,'A'),(2,'B'),(3,'C');

/*Table structure for table `info` */

DROP TABLE IF EXISTS `info`;

CREATE TABLE `info` (
  `info_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`info_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

/*Data for the table `info` */

insert  into `info`(`info_id`,`user_id`,`parent_id`,`class_id`) values (1,3,2,1);

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) DEFAULT NULL,
  `users_types_id` int(11) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

/*Data for the table `user` */

insert  into `user`(`user_id`,`user_name`,`users_types_id`,`class_id`) values (1,'TeacherA',1,1),(2,'Parent',2,0),(3,'StudentA',3,1),(4,'TeacherB',1,2),(5,'TeacherC',1,3);

DROP TABLE IF EXISTS `users_types`;

CREATE TABLE `users_types` (
  `users_types_id` int(11) NOT NULL AUTO_INCREMENT,
  `type` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`users_types_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

/*Data for the table `users_types` */

insert  into `users_types`(`users_types_id`,`type`) values (1,'Teacher'),(2,'Parent'),(3,'Student');

ここにsqlfiddle

また、挿入する前に、情報テーブルにユーザーと親のレコードが存在するかどうかを確認してください。

于 2012-10-22T06:46:23.213 に答える
0

アプリケーションを別の角度から見ると、事態ははるかに簡単になります。まず、ユーザーエンティティがあります。これは、ユーザーが異なる機能を持っている必要がある場合に、すべての承認機能を提供します。異なるタイプのユーザーを作成する方がよいでしょう。

Users:
id (int)
user_type_id   int
username       varchar
password       varchar
email          varchar

User_types:
id             int
name           varchar

InnoDBエンジンを使用する場合は、参照整合性のために外部キーUsers-User_typesを作成できます。

于 2012-10-22T06:32:43.010 に答える