【问题标题】:MySQL two tables design with keysMySQL带键的两张表设计
【发布时间】:2016-06-29 23:47:13
【问题描述】:

我正在设计教师和部门数据库,其中包括 id、姓名、学校、学院、部门等。

教职员工的脚本是

CREATE TABLE `faculty` (
  `id` varchar(12) NOT NULL,
  `name` varchar(255) NOT NULL,
  `school` varchar(255) DEFAULT NULL,
  `college` varchar(255) DEFAULT NULL,
  `dept` varchar(255) DEFAULT NULL,
  `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='faculty';

数据将是

1, David, Harvard, College of Engineering, Computer Science
2, John, Harvard, College of Engineering, Computer Science
3, Clare, MIT, College of Law, Law
4, Jim, MIT, College of Science, Computer Science

当然,school、college、dept应该是不同的表,并且有关系。

但我没有部门代码(id)和它的固定名称。部门名称可以是“Computer Science”或“Computer Engineering”,具体取决于学校。学院名称相同。

这些表和关系有什么简单有效的方法吗?我不认为像 department_id 这样简单的自动攻击不好。

最初,我认为部门名称+自动编号的4个字符可以作为部门的复合键。

Comp0001
Comp0002
Biol0001
Biol0002

提前感谢您的 cmets。

【问题讨论】:

    标签: mysql database composite-primary-key


    【解决方案1】:

    据我了解您的数据,学校、学院和系是相互关联的,对吗?因为在哈佛(学校),工程学院被称为“工程学院”,而在麻省理工学院,例如可以称为“工程学院”。两所学校的工程学院的部门也可能不同。因此,我建议使用以下模型:

    Faculty (id (PK), name, dept_id (FK), college_id (FK), school_id (FK), update_date)
    Department (id (PK), college_id (PK,FK), school_id (PK,FK), name)
    College (id (PK), school_id (PK,FK), name)
    School (id (PK), name)
    

    而且我认为没有理由不对 ID 使用自动增量,除非您有意参考您建议的智能代码。

    【讨论】:

    • 感谢您的 cmets。那么您认为没有理由不在 Department、College、School 中使用 auto inclement 作为 ID (PK) 吗?
    • 我看不出像您建议的那样使用智能代码的充分理由。对于 SELECT 查询,一些连接会带来名称。如果您要创建用户界面来添加或修改数据,他们将使用下拉菜单......那么,在什么情况下您需要输入智能代码?
    • 没有我需要输入的具体情况。这么好去与汽车恶劣?对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多