Сначала перечислите, какие «объекты» или вещи нужно отслеживать.
- Пользователи
- ИД пользователя
- ФИО
- его особенности? Вы сказали, что не все пользователи могут
- ...
- Особенности:
- featureid
- описание
- стоимость
- ...
- UserHasFeature
- ссылка между пользователем и функцией
- каждая строка - идентификатор пользователя, featureid
С его помощью вы можете запросить, у какого пользователя есть какая функция. Или перечислите пользователей, которые имеют доступ к определенной функции.
В вашем веб-приложении вам потребуются функции администратора:
- управление пользователями: добавление, удаление, изменение, список
- функция: добавить, удалить, изменить, список
- управление ссылками: добавить, удалить, список
- Отчеты: любые отчеты, которые вы хотите иметь
И пользовательские функции:
- пользователь: войти, изменить, сбросить пароль, просмотреть все функции, просмотреть функции, которые уже есть у пользователя, добавить новую функцию, удалить функцию
- отчеты: всего стоимость функций, которые использует пользователь, другие
Теперь это очень быстрый первый набросок. Существует множество пропущенных требований:
- рабочий процесс утверждения: может ли пользователь изменять свои функции без одобрения X?
- способы оплаты
- номер проекта для внутреннего выставление счетов
- структура затрат: ежемесячно, один раз, ...?
- менеджеры могут просматривать функции сотрудников, которыми он управляет?
- ...
Это нужно помнить:
- Начните с объектов в вашем проекте. Они становятся таблицами.
- Характеристики объектов становятся полями в ваших таблицах.
- Если во многих таблицах объектов появляются одинаковые характеристики c с одинаковыми значениями, рассмотрите возможность создания новой таблицы для эти. Ex. в адресе вы не оставите значение страны в виде простого поля VARCHAR. Вы бы связались с другой таблицей со значениями стран.
- Перечислите отношения. Они становятся внешними ключами или таблицами ссылок.
- Разделите ваши объекты. Так что применяйте 1NF, 2NF и 3NF как минимум. Этого достаточно для большинства приложений. (NF == Обычная форма).
- Для каждой таблицы и ссылок требуются страницы администратора (CRUD)
- Пользователи имеют ограниченное представление, касающееся только их функций.
Это огромная тема, я мог бы go снова и снова, но это может помочь вам начать.
Веселитесь!