mysql - 如何在mysql中使用位标志

标签 mysql bitflags

我在 mysql 中使用二进制位标志来确定一个人的角色。该人可以是教师讲师两者。每个学院都有一名或多名独特的教职人员(一对多关系)。另外每个学院都有一名指导员。一名讲师可以属于一个或多个学院。表 person 存储该特定个人的基本数据(姓名、电子邮件等)。为了确定角色,我部分创建了一个 person_role 表,但不确定使用位标志需要哪些字段或其类型?

CREATE TABLE IF NOT EXISTS `academy` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(25) NOT NULL,
  `academy_id` int(11) NOT NULL,
  `street_address` varchar(50) NOT NULL,
  `city` varchar(25) NOT NULL,
  `state` varchar(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `person` (
 id int(11) NOT NULL auto_increment,
 `academy_id` int(11) NOT NULL,
 `person_name` varchar(50) NOT NULL,
 `person_email` varchar(50) default NULL, 
 `person_phone` varchar(15) default NULL,
 PRIMARY KEY (`id`),
 CONSTRAINT `academy_id` FOREIGN KEY (`academy_id`) REFERENCES `academy` (`academy_id`) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE IF NOT EXISTS `person_role` (
  `contact` tinyint(1) NOT NULL,
  `instructor` tinyint(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

最佳答案

您可以在 person_role 表上添加另一个名为 faculty 的位字段。这样您就能够满足:

The person can be either faculty, instructor or both.

由于人员与其角色之间存在“一对一”关系,因此您可以移动 person< 上的 instructorfaculty 位字段 表并删除 person_role 表。

关于mysql - 如何在mysql中使用位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19994864/

相关文章:

java - 遍历@IntDef、@StringDef 或任何@Def 类中的值

c - -D name=definition and bitwise operator

c - 优化位标志检查

c - 确定字节中的哪一位被设置

c - #defined 位标志和枚举 - 在 "c"中和平共处

MYSQL - 从选择中删除

mysql - 如何在 Docker 上使用与 MySQL 的加密连接

c# - 如何在 Entity Framework 中获取列的默认值

php - 如何根据MySQL中某个字段中某个值出现的次数来获取记录?

php - MySQL GROUP BY 优先考虑某些行