我是 mysql 的新手。我想为一所学校在 mysql 中创建一个数据库。该数据库应存储教师信息,并为其中一些教师提供创建群组的可能性。
所以我创建了一个数据库,其中包含一个表 group
和一个表 professeur
。 Group 与教师之间存在多对多关系,反之亦然,这派生出另一个表 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;
教师只能修改他们创建的组(即他们可以从他们的组中插入和删除成员)。此外,并非所有教师都有权创建和修改小组。
创建表格后,我想知道谁会给他们适当的权利来做所有这些事情。我考虑过创建管理员。管理员可以授予某些教师创建和修改自己的组的权限,也可以撤销这些权限。
我创建了一个表来存储管理员,但管理员将授予管理员必要的权限来执行这些操作。这让我回到了第一点。并且这张表可能与数据库中的其他表有一些关系,从而派生出一些不必要的表。
无论如何,我考虑过将教授表更改为staffs
之类的通用表,并将管理员添加到表中。然后将这些人员添加到数据库中。这意味着创建一个新员工相当于将员工的信息添加到表 staffs
中,然后将此员工作为用户添加到数据库中。从那里我可以对每个用户使用 SQL 函数,如 GRANT
和 REVOKE
。
我不确定这种方法是否非常有效,因为这意味着如果学校有 1000 名教授,那么它的数据库中就有 1000 名用户。 有没有有效的方法来解决这个问题?谢谢。
最佳答案
使用内置的 MySQL 用户概念来控制应用程序用户访问是非正统的。对于基本应用程序,我建议在组表中有另一列用于引用教授表的 owner_user_id。然后在应用程序代码中,在更改组时检查该 ID。 祝你好运!
关于php - 如何为数据库中的用户和管理员建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683419/