Существует много, чтобы описать все проблемы в сводке, но я выделю несколько.
- Основные нарушения дизайна: такие как таблица / база данных для каждого пользователя
- дизайн объекта, 3NF: такой как category.budget и ledger.transaction_type
- дизайн ссылочной целостности / отношения:
- учетная запись для одного пользователя, но таблица учетных записей не содержит идентификатор пользователя;
- usershare - это подмножество главной книги, но они оба указывают на пользователя;
- вопросы именования объектов:
- четкие и непротиворечивые объекты именования, основанные нана реальном использовании.Является ли участник пользователем или пользователем участником?Если они одинаковые, выберите одно имя.Если они не одинаковы, дизайн отличается.Использует ли персонал клиента или клиента, а не участника?
- последовательность в названии вашего ключа.Имя ключа должно напрямую связывать его с исходным объектом.Members.ID должен указываться как members_id, а не user_id.Тем не менее, посмотрите следующую запись, прежде чем исправлять это.
- Будьте последовательны в множественности вашей сущности.По общему мнению, имя должно описывать одну запись (Пользователь), а не все записи (Пользователи).
- ledger.spent_on - это имя, очевидно, не является датой.Это может быть также указание на пользователя или категорию.Имя атрибута должно описывать атрибут без необходимости дополнительного объяснения.Например, ledger.Purchase_Date не требует пояснений.Также должно быть понятно, как это связано с сущностью.UserShare.Share действительно не говорит мне, что это содержит.
Извините, что тупой, но я бы начал все сначала.Считайте, что у вас есть хороший пробный запуск, и начните снова, используя дополнительную информацию, которую вы имеете.
- Задайте вопросы своим проектам (Все ли пользователи? Все ли пользователи?).Если ответом является что-то отличное от «Да» или «Нет», разбейте его дальше.
- Попробуйте сценарии «что, если» (Что, если общий регистр превышает бюджет категории? Как будут восприняты предыдущие расходы, если бюджет категории изменится?)
- Подумайте, какие вопросы для отчетности можно задать (Кто превысил бюджет? Сколько мы тратим на эту категорию?), А затем рассмотрим запрос, чтобы ответить на вопрос.
Читайте о 3NF и, возможно, о некоторых более высоких уровнях нормализации.В то время как 3NF - это почти минимальная нормализация, более высокие уровни становятся все более специализированными и могут подходить или не подходить для вашего дизайна.
Чем лучше вы понимаете свои данные и бизнес, тем лучше будет ваш дизайн, илучше получится конечный продукт.