Несколько строк и запятая дизайн колонки в MySQL

У меня есть таблица, где мне нужно добавить строки следующим образом:

id  | empid  | manager | page
------------------------------
1   | emp001 | mg001   | page1
2   | emp001 | mg001   | page2
3   | emp001 | mg002   | page1

Поэтому я не понимаю, использовать ли, как показано выше, или использовать запятую, как,

id  | empid   | manager | page
--------------------------------- 
1   | emp001  | mg001   | page1,page2,page3,page4.....    
2   | emp001  | mg002   | page2,page10,page5,.....

Если я перейду с option1, я чувствую, что количество строк продолжает увеличиваться и empid а также mangerid могу повторить Но если я иду с option2, то я чувствую его ненормализованную форму.

Кто-нибудь может предложить, какое решение лучше и почему?

2 ответа

Решение

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

Следовательно, подход, представленный в варианте 1, который на самом деле переводит ваши данные в 1NF (первая нормальная форма), намного лучше и не будет вас кусать в будущем, как вариант 2 наверняка.

Если в будущем у вас может возникнуть идея проанализировать сотрудников и их менеджеров по страницам, то здесь вариант 2 кусает вас.

В качестве дополнительного примечания, я думаю, вы могли бы уменьшить объем памяти, необходимый для ваших столбцов, и перестать повторяться, добавив дополнительные таблицы для хранения строк сотрудников и руководителей и ссылаясь на них только целочисленным столбцом. Что касается страниц столбцов, я считаю излишним добавлять часть "страница", чтобы значения столбцов выглядели как "страница X ". Имя столбца уже говорит вам, что оно состоит из значений страницы, поэтому в этом случае также будет достаточно целочисленного столбца X.

Я считаю следующую схему хорошим началом:

  • Таблица сотрудников, хранящая их идентификаторы как целые числа и имена как текст
  • Управляемая таблица менеджеров аналогична таблице сотрудников
  • Соединительная таблица Employees_Managers хранит свой идентификатор, внешний ключ для Employees.ID и Managers.ID и страницы типа integer.

YMMV зависит от конкретного варианта использования, но, как правило, - нормализуйте свою базу данных (или, по крайней мере, не нарушайте 1NF, как предлагает второй вариант!), Чтобы вы могли легко запрашивать / обновлять ее. Базы данных созданы для хранения строк и эффективного запроса к ним, и, если у вас нет повторного количества строк (читай: как в Facebook), не пытайтесь изобретать колесо.

Другие вопросы по тегам