209 похожих чатов

У меня в приложухе есть возможность создавать папки и загружать

туда файлы, в бд записи папки хранится массив id-шников на файлы, а в самих файлах поле parentId указывает на папку, в которой он хранится и путь до файла
Делаю я переименование папки и прикол в том, что в бд я изменяю путь path папки, но у дочерних файлов остается старое имя и я ж не хочу пробегаться по всем дочерним файлам с помощью кучи запросов изменять path у всех, мб в данном случае можно какой-то другой подходи использовать в структуре всей этой?

25 ответов

48 просмотров

Возможно подойдёт нормализация базы данных. Для модели записи(update/insert) удобно нормализовать данные, тогда не надо бегать по всей БД и обновлять каждую запись. Для чтения(там где надо просто отдать клиенту) удобно, когда данные лежат денормализованно вместе

Maxemga- Автор вопроса
John Doe
Возможно подойдёт нормализация базы данных. Для ...

нормализовать это имеется ввиду отношения построить? Ну чтоб папка возвращала не массив id-шников, а полностью поля файлов?

Maxemga
нормализовать это имеется ввиду отношения построит...

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

Maxemga
нормализовать это имеется ввиду отношения построит...

Это придётся вам тогда все пути править, где есть переименованная папка.

Maxemga- Автор вопроса

К сожалению

Maxemga
К сожалению

Нормализация подойдёт, если вы глубину вложенности знаете, а так у вас плоская структура с parent_id. тут дело не в нормализации

Maxemga- Автор вопроса
Roman Karas` Karas'
Нормализация подойдёт, если вы глубину вложенности...

Окей, возьму на заметку Я за работу с БД не опытный, ибо я Фронтер, который лезет в бэк, поэтому глубокого понимания у меня нет)

Maxemga
К сожалению

я сам фронтендер ))

Maxemga
Окей, возьму на заметку Я за работу с БД не опытн...

Вам нада только самых близких детей. первого колена найти и поменять у них запись parent_id. Всё одним запросом можно сделать.

Можно, например: — менять путь у вложенных файлов/папок одним запросом типа update files set path = replace(path, :oldPath, :newPath) where path like :oldPath || '/' (запрос из головы, корректность не гарантируется) — реорганизовать структуру в nested sets и хранить не path, а просто name (заодно и проблема с ос-зависимыми разделителями пути уйдёт). Там можно будет одним запросом выбрать цепочку родителей или всех детей, да ну и в целом поудобнее работать с иерархией. А из минусов только менее быстрые вставка/изменение/удаление

Roman Karas` Karas'
Вам нада только самых близких детей. первого колен...

Ну точнее двумя. Один запрос найти все id у кого parent_id изменился. И второй запрос, проапдейтить эти записи

Maxemga- Автор вопроса
Roman Karas` Karas'
Ну точнее двумя. Один запрос найти все id у кого p...

Это первое что приходит в голову, да, но проблема в том что в папке может лежать другая папка файлов и так куча куча штук И вот файлы из вложенных папок не знаю Id той папки которую я изменяю или удаляю там, они лишь ссылаются на родительскую, которая уже ссылается на родительскую папку

Maxemga- Автор вопроса
Andrey Ryahovskiy
Можно, например: — менять путь у вложенных файлов/...

Спасибо за развернутый ответ, проанализирую впитаю всю информацию, но пока вижу, что вы говорите убрать path, но path то нужен чтоб обращаться к файлам в файловой системе

Maxemga
Спасибо за развернутый ответ, проанализирую впитаю...

Его строить на лету можно будет. Для конкретного фала/папки одним запросом получаем всех родителей и джойним их имена с разделителем = путь

Maxemga- Автор вопроса
Andrey Ryahovskiy
Его строить на лету можно будет. Для конкретного ф...

Звучит круто, поизучаю этот подход, спасибо

Maxemga- Автор вопроса
Roman Karas` Karas'
У вас же есть parent_id вы говорите

На примере: Есть папка в которой хранятся файлы и другие папки с файлами, файлы в других папках ссылаются на свои родительские папки (parent-I’d), а файлы которые знают parentId изменяемой папки являются лишь теми, для которых изменяемая папка валяется родителем

Maxemga- Автор вопроса
Maxemga
На примере: Есть папка в которой хранятся файлы и ...

Ой как-то слишком тяжело все и запутано, врятли понятно мое объяснение)

Maxemga- Автор вопроса
Roman Karas` Karas'
Всё так и есть

Ну вот, и если я выполню один запрос на изменение всех файлов с parentId, то поменяются лишь вложенные в папку файлы, а остальные вложенные нет, да и сейчас я понял то что это ведь не сработает все равно, у каждого файла же свой путь должен быть, а если я сделаю запрос на все файлы то у всех будет одинаковый путь (на счет этого я не уверен, мб можно написать запрос на изменение всех файлов и при этом брать у них path я хз тут, не хватает опыта)

Maxemga
Ну вот, и если я выполню один запрос на изменение ...

Смотрите, каждый файл или папка должен знать только своих родителей, у вас так и есть насколько я правильно понял.

> мб можно написать запрос на изменение всех файлов и при этом брать у них path Можно, как примерно это делается я выше писал. У update ... set можно использовать старое значение поля, есть функции преобразования строк, которыми можно старый кусок пути заменить на новый

Maxemga
Звучит круто, поизучаю этот подход, спасибо

https://stackoverflow.com/questions/19834400/what-is-the-simplest-way-to-save-a-file-tree-in-a-postgres-database

Похожие вопросы

Обсуждают сегодня

@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Hello, Is iExec also part of the "inception program" or another one ? Would it be a name to qualified the nature of the relationship between iExec and Nvidia? And does Secret ...
Ñïķøłäś
8
Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
any reference of this implementation?
BitBuddha
29
Also, why can’t the community have a vote/ say when it comes to initiatives like buybacks. Isn’t the point of crypto decentralisation? Don’t we deserve input as long term supp...
👨🏽‍🦰
13
Hi guys, any problem with Pulsebrige? Trying to transfer from wETH to ETH. First it tells me to connect my metamask "through mobile app" not desktop. Then I did and confirmed ...
Snowflakecrypto
13
Карта сайта