【发布时间】:2011-12-30 19:51:07
【问题描述】:
我对mysql很陌生。我想在 mysql 中为一所学校创建一个数据库。该数据库应存储教师的信息,并为其中一些教师提供创建小组的可能性。
所以我创建了一个数据库,其中包含一个表group 和一个表professeur。组与教师具有多对多关系,反之亦然,从而派生出另一个表Group_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;
教师只能修改他们创建的小组(即他们可以在小组中插入和删除成员)。此外,并非所有教师都有权创建和修改小组。
创建表格后,我想知道谁会给他们适当的权限来做所有这些事情。我考虑过创建一个管理员。管理员可以授予某些教师创建和修改自己的组的权限,也可以撤销这些权限。
我创建了一个表来存储管理员,但管理员将授予管理员执行这些操作的必要权限。这让我回到了第一方。并且这个表可能与数据库中的其他表有一些关系,从而衍生出一些不必要的表。
无论如何,我考虑将professor 表更改为staffs 之类的一般名称,并将管理员添加到表中。然后将这些员工添加到数据库中。这意味着创建一个新员工对应于将员工的信息添加到表staffs,然后将该员工作为用户添加到数据库中。从那里我可以对每个用户使用像GRANT 和REVOKE 这样的SQL 函数。
我不确定这种方法是否非常有效,因为这意味着如果学校有 1000 名教授,那么它的数据库中就有 1000 名用户。 有没有什么有效的方法来解决这个问题?谢谢。
【问题讨论】:
-
编程是一门艺术,您可以通过多种方式设计架构。对于您的答案,我没有正确或不正确的解决方案。即使你拥有的东西也适合我。
-
@EmmanuelN:哪种解决方案?您的意思是在数据库中为每个员工创建一个用户?