Как правильно спроектировать таблицу?

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Интегрирую партнёрское API.

Есть таблица, хранящая занятость объектов по неделям года. Имеет такой вот неуклюжий формат:

ID int — идентификатор оьъекта

vacancy char — строка, где каждый символ — флаг занятости объекта на конкретной неделе (в году 52 недели), флаг принимает значения «Y» (свободно), «N» (занято) и «Q» (on request). (В поле больше 104 символов, получается, на пару лет информация.)

Например:

1;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
2;YYYYYNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
3;YYYYYYYYYNNYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

Выглядит смешно, но вот задумался, как же надо им было сделать по-другому и правильно.

Кто поможет?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Map: (Id, (start, end)) -> Yes
Точнее: Set of (Id, (start, end))
Id; Start; End
1; 01.10.2009; 02.10.2009;
1; 11.10.2009; 13.10.2009;
2; 01.10.2009; 03.10.2009;

2; 11.10.2009; 15.10.2009; ...

Мало даних для нормального проектування структури таблиці.
Може, такий формат таблиці найкраще підходить, наприклад, для виводу даних (друку чи ще чого). Тут плюсів декілька, хоч і корява.
Залежить від того, які об’єми даних, як часто дані змінюються (переключення станів), яким чином-способом, обов’язковість даних, яка база, чи (і як) ще обробляється, чи потрібен аудит дій, і т.д і т.п.
Діапазон — якщо кожен день переключення, всі дні заповнені — неефективно.

Мало інфо. Ще — може, то не по неділям, а «день» — «ніч», на 1 рік?

А вообще понятие Неделя — стремно, Диапазон-Период-времени, и все, пойдет, выбирай любое. По крайней мере пригодится, когда рабочая неделя сократиться на пару дней D) ну и вообще.

А не — c Q и полями на два года вперед сеты уже не вяжутся

Для MySQL можно было б заменить char (52) на set (’1’, ’2’,..., ’52’)

Тогда легче будет искать по такому полю стандартными ф-циями и select будет возвращать более удобоваримый результат, ну и размер таблицы уменьшится.

я бы создал сущности
1) неделя с диапазоном от какой даты до какой она
2) сущность — объекты

и многие ко многим в связующей таблице с доп полем статус — свободно — занято итд

Підписатись на коментарі