Mysql: enum путаница - PullRequest
       12

Mysql: enum путаница

2 голосов
/ 26 февраля 2010

У меня есть таблица сотрудников, у сотрудника есть интересы, поэтому таблицу можно оформить так:

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.

Как мне оформить стол? Должен ли я использовать enum или другие?

Редактировать:

Спасибо за ваш ответ.

Предположим, что человек может быть мистером или мадам или миссис

Я делаю выпадающий список в 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 ]

5 голосов
/ 26 февраля 2010

Существует третий вариант, создание дополнительной таблицы для хранения значений процентов.

ИНТЕРЕСЫ

  • interest_id, int, первичный ключ
  • interest_value, строка / varchar, уникальное ограничение (для остановки дубликатов)

Отношения «многие ко многим»?


Однако, если вы хотите поддержать работника, имеющего несколько интересов, вам понадобится третья таблица. Это отношение «многие ко многим»: третья таблица будет находиться между таблицами «СОТРУДНИКИ» и «ИНТЕРЕСЫ» и иметь отношения внешнего ключа с обеими.

EMPLOYEE_INTERESTS

  • employee_id, первичный ключ, внешний ключ к EMPLOYEES.id
  • interest_id, первичный ключ, внешний ключ к ИНТЕРЕСАМ. Interest_id

Отношения один-ко-многим?


Если запись EMPLOYEES может иметь только один ИНТЕРЕС, то вам нужно только обновить столбец EMPLOYEES.interest, чтобы иметь отношение внешнего ключа с таблицей INTERESTS.

СОТРУДНИКИ

  • interest_id, первичный ключ, внешний ключ к ИНТЕРЕСАМ. Interest_id
2 голосов
/ 26 февраля 2010

Вы действительно должны составить 3 таблицы, предполагая, что у сотрудника может быть несколько интересов. (Ваш текущий дизайн ограничивает каждого сотрудника до 1 интереса.) Примерно так:

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

Interest
-------
id
description

Employee_Interest
--------
employeeID
interestID

Что касается правки , я бы сказал, что перечисление является лучшим из ваших двух примеров, поскольку оно ограничивает вас заранее определенными допустимыми значениями. Но многие утверждают, что вы должны составить справочную таблицу (роль с идентификатором и описанием) даже для этого

...