Mysql:枚举混乱

时间:2010-02-26 17:18:53

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

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

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)
);

在这种背景下,哪个更好?

2 个答案:

答案 0 :(得分:5)

还有第三种选择,即创建一个用于保存兴趣值的附加表。

兴趣

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

多对多关系?


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

EMPLOYEE_INTERESTS

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

一对多关系?


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

EMPLOYEES

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

答案 1 :(得分:2)

假设一个员工可以有多个兴趣,你应该真正制作3个表。 (您当前的设计将每位员工限制为1个兴趣。)这样的事情:

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

Interest
-------
id
description

Employee_Interest
--------
employeeID
interestID

关于编辑,我会说enum是你的两个例子中的更好,因为它限制你到预定的允许值。但是很多人会争辩说你应该制作一个查找表(带有id和描述的角色),即使是那个