【问题标题】:Mysql: enum confusionMysql:枚举混淆
【发布时间】:2010-02-26 17:18:53
【问题描述】:

我有一张员工表,员工有兴趣,所以表可以这样设计:

create table emp(
 id int(10) not null auto_increment,
 name varchar(30),
 interest varchar(50),
 primary key(id)
);

或者这个:

create table emp(
 id int(10) not null auto_increment,
 name varchar(30),
 interest enum('football','basketball','music','table tennis','volleyball'),
 primary key(id)
);

兴趣数量可以在50左右。

我应该如何设计桌子?我应该使用枚举还是其他?

编辑:

感谢您的回复。

假设一个人可以是先生或女士或女士

我在 PHP 中创建了一个下拉列表。

<select name="role">
<option value="Mr.">Mr.</option>
<option value="Ms">Ms</option>
<option value="Madame">Madame</option>
</select>

对于数据库部分,我可以这样做:

create table emp(
    id int(10) not null auto_increment,
    name varchar(30),
    role varchar(50),
    primary key(id)
);

或者这个:

create table emp(
    id int(10) not null auto_increment,
    name varchar(30),
    role enum('Mr.','Ms.','Madame'),
    primary key(id)
);

在这种情况下,哪个更好?

【问题讨论】:

  • 您想支持一个人的多种兴趣,还是应该一个人只能拥有一种兴趣?
  • 那么,如果我为此使用单选按钮,我该怎么办?
  • 关于编辑,我会说枚举是你的两个例子中更好的,因为它将你限制在预定的允许值。但是很多人会争辩说,即使是这样,您也应该制作一个查找表(带有 id 和描述的角色)

标签: sql mysql database-design data-modeling enums


【解决方案1】:

还有第三个选项,创建一个额外的表来保存利息值。

兴趣

  • interest_id, int, 主键
  • interest_value,字符串/varchar,唯一约束(停止重复)

多对多关系?


但是,如果您想支持具有多种兴趣的员工,则需要第三张桌子。这是一个多对多关系——第三个表将位于 EMPLOYEES 和 INTERESTS 表之间,并且与这两个表都有外键关系。

EMPLOYEE_INTERESTS

  • employee_id,EMPLOYEES.id 的主键、外键
  • interest_id,INTERESTS.interest_id 的主键、外键

一对多关系?


如果一条 EMPLOYEES 记录只能有一个 INTEREST,那么您只需更新 EMPLOYEES.interest 列以与 INTERESTS 表建立外键关系。

员工

  • interest_id,INTERESTS.interest_id 的主键、外键

【讨论】:

  • IMO 最灵活的解决方案!
【解决方案2】:

假设一个员工可以有多种兴趣,你真的应该制作 3 张桌子。 (您当前的设计将每个员工限制为 1 个兴趣。)像这样:

Employee (emp)
-------
id
name

Interest
-------
id
description

Employee_Interest
--------
employeeID
interestID

关于编辑,我想说枚举是你的 2 个例子中更好的,因为它将你限制在预先确定的允许值。但是很多人会争辩说,即使是这样,您也应该制作一个查找表(带有 id 和描述的角色)

【讨论】:

  • @谢谢你的建议,foradie,我想使用枚举,因为它更实用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2014-06-12
  • 1970-01-01
相关资源
最近更新 更多