У меня есть account_id для всех таблиц в базе данных, которые принадлежат учетной записи. Может быть, поэтому наша база данных использует много памяти? - PullRequest
0 голосов
/ 23 февраля 2020

Приложение интенсивно использует данные. Это система управления потенциальными клиентами, каждый из которых может принести нашим пользователям тысячи долларов, и случайное возвращение других клиентов станет верным способом потерять доверие наших клиентов. Мы интенсивно используем шаблон сущности на клиенте. Это требует, чтобы мы получили коллекции данных и сохранили их как коллекции на клиенте. Когда я проектировал базу данных, я думал о том, что если бы у меня в каждой таблице был идентификатор учетной записи, это облегчило бы получение всех данных без возврата данных из другой учетной записи при меньшем или большем количестве эффективных запросов. Я понимаю, что есть и другие способы справиться с этим, но у нас был очень короткий срок, и нам нужно было создать полное приложение с ~ 50 таблицами для запуска бета-версии за 3 месяца. Тем не менее, у нас также есть много запросов, которые интенсивно используют соединения и группируют методы, чтобы предотвратить (n + 1) поездки в базу данных. Просто для анализа большого количества данных требуется нечто большее, чем база данных? Большая проблема в том, что в настоящее время у нас всего 45 активных клиентов. Приложение быстрое и прекрасно себя чувствует, мы просто раздвигаем пределы памяти базы данных. Текущая база данных имеет 8 Гб оперативной памяти.

Это шаблон, который я сделал. Я знаю, что это не нормализовано для ключей, но все, что я прочитал, похоже, не вызвало бы эту проблему. Но я не специалист по базам данных и буду признателен за любые советы.

Account Table:
id
first_name
...etc

Record Table:
id
account_id
address
...etc

Analysis Table:
id
account_id
record_id
expected_return_on_investment
...etc

Comps Table:
id
account_id
record_id
analysis_id
cost
...etc

1 Ответ

0 голосов
/ 23 февраля 2020

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

Идентификатор таблицы Account должен быть account_id во всех других таблицах. При сортировке данных, чтобы получить (например) все записи от клиента, вы должны искать все с помощью account_id. Затем, чтобы различать их, вы можете использовать идентификатор. Кроме того, вам не нужно добавлять account_id в Analysis and Comps; также не следует добавлять record_id в Анализ. И последнее, но не менее важное: record_id не требуется в Comps. Почему? Потому что, поскольку у вас есть идентификатор родительского элемента, вы можете извлечь другие идентификаторы, хранящиеся там.

Кстати, если вы хотите сделать его более безопасным, я бы sh идентификаторы учетной записи и сохранить их в другой переменной, которую я бы назвал hashID. Затем я передам это ha sh другим таблицам. В случае, если кто-то не авторизованный получил этот номер sh, он не сможет получить идентификатор. Если у вас есть доступ к базе данных, сравнивая хеши, вы узнаете, на какого пользователя вы ссылаетесь. Однако, если вы этого не сделаете, вы не сможете получить больше информации от этого ха sh (если у него был идентификатор, да).

...