我对mysql很新。我想在一个学校的mysql中创建一个数据库。这个数据库应该存储教师'信息并为这些教师提供创建小组的可能性。
所以我创建了一个包含表group
和表professeur
的数据库。小组与教师有多对多的关系,反之亦然,这导致另一个表格Group_professeur
。这是一个简单的表格结构:
Professeur:
CREATE TABLE IF NOT EXISTS `professeur` (
`id_professeur` int(11) NOT NULL AUTO_INCREMENT,
`nom_professeur` varchar(50) NOT NULL,
`prenom_professeur` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id_professeur`),
UNIQUE KEY `LOGIN` (`login`),
UNIQUE KEY `MDP` (`passwd`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=103 ;
组
CREATE TABLE IF NOT EXISTS `groupe` (
`id_groupe` int(11) NOT NULL AUTO_INCREMENT,
`nom_groupe` varchar(255) NOT NULL,
`id_prof_responsable` int(11) NOT NULL,
PRIMARY KEY (`id_groupe`),
UNIQUE KEY `nom_groupe` (`nom_groupe`),
KEY `id_prof_responsable` (`id_prof_responsable`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ALTER TABLE `groupe`
ADD CONSTRAINT `fk_professeur_to_groupe` FOREIGN KEY (`id_prof_responsable`) REFERENCES `professeur` (`id_professeur`) ON UPDATE CASCADE
Groupe_has_teachers:
CREATE TABLE IF NOT EXISTS `groupe_professeur` (
`id_groupe` int(11) NOT NULL,
`id_professeur` int(11) NOT NULL,
KEY `id_groupe` (`id_groupe`),
KEY `id_professeur` (`id_professeur`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `groupe_professeur`
ADD CONSTRAINT `groupe_professeur_ibfk_2` FOREIGN KEY (`id_professeur`) REFERENCES `professeur` (`id_professeur`) ON UPDATE CASCADE,
ADD CONSTRAINT `groupe_professeur_ibfk_1` FOREIGN KEY (`id_groupe`) REFERENCES `groupe` (`id_groupe`) ON UPDATE CASCADE;
教师只能修改他们创建的组(即他们可以插入和删除组中的成员)。此外,并非所有教师都有权创建和修改群组。
创建表格之后,我想知道谁会给予他们适当的权利来做所有这些事情。我考虑过创建一个管理员。管理员可以授予某些教师创建和修改他们自己的组的权限,也可以撤销这些权限。
我创建了一个表,它将存储管理员,但是谁将为管理员提供执行这些操作的必要权限。这让我回到原点。此表可能与数据库中的其他表有一些关系,从而导出一些不必要的表。
无论如何,我考虑过将教授表改为像staffs
这样的通用表,并将管理员添加到表中。然后将这些人员添加到数据库中。这意味着创建新员工对应于将员工的信息添加到表staffs
,然后将此员工作为用户添加到数据库中。从那里我可以为每个用户使用GRANT
和REVOKE
之类的SQL函数。
我不确定这种方法是否非常有效,因为这意味着如果学校有1000名教授,那么它的数据库中就有1000名用户。 有没有有效的方法来解决这个问题?感谢。
答案 0 :(得分:1)
使用内置的MySQL用户概念控制应用程序用户访问是非正统的。对于基本应用程序,我建议在group表中为owner_user_id提供另一个列,该列将引用教授表。然后在应用程序代码中,在更改组时检查该id。 祝你好运!
答案 1 :(得分:0)