如何为数据库中的用户和管理员建模?

时间:2011-12-30 19:51:08

标签: php mysql database

我对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,然后将此员工作为用户添加到数据库中。从那里我可以为每个用户使用GRANTREVOKE之类的SQL函数。

我不确定这种方法是否非常有效,因为这意味着如果学校有1000名教授,那么它的数据库中就有1000名用户。 有没有有效的方法来解决这个问题?感谢。

2 个答案:

答案 0 :(得分:1)

使用内置的MySQL用户概念控制应用程序用户访问是非正统的。对于基本应用程序,我建议在group表中为owner_user_id提供另一个列,该列将引用教授表。然后在应用程序代码中,在更改组时检查该id。 祝你好运!

答案 1 :(得分:0)