Я разрабатываю веб-приложение для дьяконов в своей церкви. И хотя у меня много опыта кодирования на нескольких языках, мне еще предстоит сделать какое-либо серьезное моделирование базы данных, пока не решите решить эту проблему для моей организации.
Я очень хорошо знаком с написанием запросов sql/ddl в существующей базе данных (строго mysql-консоль, Spring MVC, Boot, Java и т.д.). Но не с тех пор, как в колледже мне пришлось рассмотреть нормализацию, 2nf, 3nf, 1:1, 1: many и т.д. Это был скромный опыт, если не сказать больше, пытаясь обновить мою память с изученными годами теории баз данных прежде чем пытаться применять эти понятия.
Я создал модель, которая, по крайней мере, мне кажется, соответствует потребностям пользователей
Мой конкретный вопрос касается заблокированных учетных записей. Я прочитал несколько сообщений об этом, что только смутило меня больше о том, как подойти к этой концепции с моей данной моделью данных? Я действительно был бы признателен за любые другие предложения и/или критику; Я определенно понимаю концепцию и силу обучения неудачей.... Спасибо.
Вариант использования:
1. Users holding office in a particular year can sign into the web
application, and view their information *(Name, Account Status,
Ordained, Team number, Calendar of their assigned duty days)*.
They can only update their personal info (name, address,
phone). Note: The account will be created for users.
2. Director, Asst. Director and System admin can log into the web
application (admin dashboard) and see a data table of all users,
w/ all relevant fields(view). This group has full read-write
privileges.
У меня есть заблокированная таблица в модели, но не уверен, что это правильный способ справиться с обновлением статуса пользователя от активного до неактивного. Если он неактивен, он не может войти в веб-приложение. Я также использовал бы это, если пользователь попытается входить в систему больше x раз подряд неудачно. Кроме того, было бы полезно (отчетность и статистика) сохранить предыдущих пользователей в базе данных за х лет, конечно же, с неактивным статусом.
Извините за использование диаграммы (я не использую инструменты диаграммы). Здесь чрезвычайно базовая выборка с соответствующими битами для таблицы аудита:
CREATE TABLE users (
user_id SERIAL,
-- ...
);
-- ...
CREATE TABLE user_updates_audit (
audit_id SERIAL,
user_id INT NOT NULL,
audit_timestamp TIMESTAMP NOT NULL default now(),
-- just free form text describing applied update (maybe old value, new value, etc)
audit_text VARCHAR(1024) NOT NULL
);
ALTER TABLE user_updates_audit ADD CONSTRAINT user_updates_audit_pk PRIMARY KEY (audit_id);
ALTER TABLE user_updates_audit ADD CONSTRAINT user_updates_audit_user_id_fk FOREIGN KEY (user_id) REFERENCES users;
Разумеется, вы можете перейти отсюда, например, изменив произвольную форму audit_text
на более строгую схему, например, внешний ключ для словаря возможных действий по обновлению (ENABLED
, DISABLED
, whatever) и фактические значения, которые изменяются. Или еще одна более сложная схема, более подходящая для вашего дела.
Но аудит свободной формы является отправной точкой.
Основное значение здесь заключается в том, что вы можете просмотреть историю изменений важных объектов в вашей системе, а не только текущее состояние.
locked
столе. Столбецusers.is_disabled
может быть достаточно. Кроме того, может существоватьuser_actions
аудитаuser_actions
которой вы можете хранить изменения дляusers
(или аналогичная таблица для любого объекта, который вам нужен аудит).