Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пользователь может запостить инфу в разном формате, doc, pdf, rtf, видео  
:(
    Опции темы
Gunslinger
Дата 17.9.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Есть таблица с пользователями. Еще нужна таблица с ресурсами, которые пользователь может добавлять. Но ресурсы могут быть в разных форматах: doc, pdf, rtf, видео. Как поступить с такой структурой? в таблице с ресурсами предусмотреть поля для каждого и,если он добавил только doc, то во всех остальных полях проставить, например, null? Или разбить таблицу: для каждого формата сделать свою?
PM MAIL   Вверх
Akina
Дата 17.9.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Юзер - тип ресурса - ссылка на файл


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gunslinger
Дата 17.9.2010, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(Akina @  17.9.2010,  13:28 Найти цитируемый пост)
Юзер - тип ресурса - ссылка на файл 

Если файлы хранить вне базы, то достаточно одного поля для ссылки, без разведения канители? Или же только так и делается - файлы хранятся не в лобах, а во вне?

Это сообщение отредактировал(а) Gunslinger - 17.9.2010, 16:43
PM MAIL   Вверх
Akina
Дата 17.9.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Хранить контент в базе глупо (есть, конечно, и исключения - скажем коллекция иконок,- но это редкость) - база пухнет, бэкапить сложно...
Не советую НЕ хранить тип файла. Во-первых, тип может не соответствовать расширению, во-вторых, для выборки/сортировки по типу потребуется использование встроенных функций ПО ВСЕМ ЗАПИСЯМ.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gunslinger
Дата 17.9.2010, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(Akina @  17.9.2010,  16:50 Найти цитируемый пост)
Не советую НЕ хранить тип файла. 

В таблице Ресурс сделать поле ПутькРесурсу типа текст. Например, запись в этом поле для пользователя 1: "C:\User1\source\2010-08-01\movie1.flv"? Так?
PM MAIL   Вверх
Akina
Дата 17.9.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Akina @  17.9.2010,  14:28 Найти цитируемый пост)
Юзер - тип ресурса - ссылка на файл 

Пример:
Юзер - (ссылка в таблицу юзеров) - Вася Пупкин
Тип ресурса - (ссылка в таблицу типов) - Видеоролик (формат FLV)
Ссылка на файл - C:\User1\source\2010-08-01\movie1.flv



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gunslinger
Дата 18.9.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(Akina @  17.9.2010,  20:49 Найти цитируемый пост)
Тип ресурса - (ссылка в таблицу типов) - Видеоролик (формат FLV)
Ссылка на файл - C:\User1\source\2010-08-01\movie1.flv

Не понял ваш стиль написанияsmile Кроме таблицы Юзер и ТипРесурса (с полем для ссылки на внешний файл) еще и ТаблицаТипов? Отдельно для хранения расширения типа и полного названия? Для убыстрения поиска, чтобы всю строку парсить не надо было?
Псевдокодом:
Код

create table User {
           user_id : numeric(10),  // первичный ключ на пользователя
           etc  : ...   // другие данные пользователя
}
create table UserResources{
         res_id : numeric(10), // первичный ключ на ресурс
         user_id : numeric(10),  //внешний ключ на пользователя в User
         resourcePath : text(100)//путь к внешнему файлу пользователя
}
create table TypeList{
        type_id : numeric(10), //первичный ключ на тип формата
        res_id : numeric(10), // внешний ключ на ресурс
        typeName : text(3), //тип формата
        typeDescription : text(30) //описание формата
        
}

PM MAIL   Вверх
LSD
Дата 19.9.2010, 10:41 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(Akina @  17.9.2010,  17:50 Найти цитируемый пост)
Хранить контент в базе глупо (есть, конечно, и исключения - скажем коллекция иконок,- но это редкость) - база пухнет, бэкапить сложно...

А хранить данные вне базы еще глупее smile 
Нет поддержки транзакций, бекапить надо тот же объем данных, только уже разбросанных по дискам, надо следить за консистентностью данных: чтобы в базе не было путей которые указывают на несуществующие файлы и чтобы не было файлов на которые никто не ссылается.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Gunslinger
Дата 20.9.2010, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



LSD, так если в базе хранить, то как тогда поступить?
PM MAIL   Вверх
Akina
Дата 20.9.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(LSD @  19.9.2010,  11:41 Найти цитируемый пост)
Нет поддержки транзакций

Зачем тебе транзакции на файловый контент? а с конфликтами и фтп-сервер справится.

Цитата(LSD @  19.9.2010,  11:41 Найти цитируемый пост)
бекапить надо тот же объем данных,

ага, щаз! где ты видел СУБД, которые хранят ровно столько, сколько занимает контент (пусть и с учётом внутренней кластеризации)? обычно как раз в файлах БД предостаточно "дырок" - это ускоряет работу.
К тому же хранящийся в файловой системе контент (как правило - кстати, это удобнее) бэкапится независимо от БД.

Цитата(LSD @  19.9.2010,  11:41 Найти цитируемый пост)
в базе не было путей которые указывают на несуществующие файлы 

Не смертельно. И при правильной организации такого быть не должно.

Цитата(LSD @  19.9.2010,  11:41 Найти цитируемый пост)
чтобы не было файлов на которые никто не ссылается

При правильной организации работы с базой такого тоже не должно быть.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LSD
Дата 20.9.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(Akina @  20.9.2010,  17:14 Найти цитируемый пост)
Зачем тебе транзакции на файловый контент?

Ну например юзер хочет обновить документ, меняется база, начинается запись в файл и тут происходит факап - приложение целиком упало. В случае с базой транзакция откатится, а в случае связки база/ФС чистить ФС придется самими (при том, что в базе следов транзакции не осталось). При обновлении/удалении данных будут аналогичные проблемы.
И даже если приложение не упало, но транзакцию откатили, надо писать свою логику по восстановлению целостности ФС.


Цитата(Akina @  20.9.2010,  17:14 Найти цитируемый пост)
ага, щаз! где ты видел СУБД, которые хранят ровно столько, сколько занимает контент (пусть и с учётом внутренней кластеризации)? обычно как раз в файлах БД предостаточно "дырок" - это ускоряет работу.

1. Надо просто тейблспейс настроить на хранение BLOB-ов. Я не спорю, что он будет занимать больше чем чистые файлы, но не критично больше.
2. Не знаю у кого как, но у того же Oracle есть инкрементные бекапы.
3. СУБД имеет средства для обеспечения консистентности бекапов. А как ты предлагаешь обеспечивать констистеность копий СУБД и файлов, в условиях когда приложение не останавливается и продолжает писать в базу и файлы?


Цитата(Akina @  20.9.2010,  17:14 Найти цитируемый пост)
Не смертельно. И при правильной организации такого быть не должно.

Цитата(Akina @  20.9.2010,  17:14 Найти цитируемый пост)
При правильной организации работы с базой такого тоже не должно быть.

Обеспечить двухфазовую транзакцию (СУБД+ФС) наверно в теории возможно, но на практике не реализуемо. А без этого всегда будет шанс, что такое хотя и не должно быть, но имеет место быть.





Цитата(Gunslinger @  20.9.2010,  17:02 Найти цитируемый пост)
так если в базе хранить, то как тогда поступить?

Вместо resourcePath хранить BLOB resource и VARCHAR file_name (имя файла под которым его загрузил пользователь). Плюс я бы добавил поле тип документа и соответствующий справочник по типам, это позволит показывать иконку для документа, отдавать корректный MIME и т.п.

Хотя конечно виде хранить в базе это не очень хорошая идея. А вот какие нибудь офисные документы, самое то.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Akina
Дата 20.9.2010, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(LSD @  20.9.2010,  18:32 Найти цитируемый пост)
Обеспечить двухфазовую транзакцию (СУБД+ФС) наверно в теории возможно, но на практике не реализуемо. А без этого всегда будет шанс, что такое хотя и не должно быть, но имеет место быть.

Вообще-то я чисто теоретически предполагал, что заливка контента на диск не есть дело самой СУБД. Что это забота не сервера БД. Вернее, даже так - я предполагал, что речь не идёт о получении конечным клиентом файла в поле записи рекордсета, что есть некий сервер, который общается и с конечным клиентом, и с сервером БД. В этих условиях мне хранение файлов в блобах кажется несколько сомнительным, и тем более сомнительным, чем пухлее файлы.
Посмотри, к примеру, на файлохранилища с веб-мордой - как-то у них описанных тобой ужастиков не происходит... тот же ютуб - представь, что было бы, если бы они сваливали пользовательский контент в СУБД...
Что же до поиска и исправления невалидных ссылок - то это в принципе вполне нормальный этап обслуживания сервера (всего сервера, а не его БД-части). Удаление непривязанных файлов, зачистка ссылок "в никуда"... скажем в связке мускул+пхп это как раз шедулится в пхп.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LSD
Дата 22.9.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Akina,
Я исходил из предположения, что это офисные документы (отчеты, докладные и т.п.). На которые будут ссылки из других таблиц, для которых нужен аудит (кто и когда добавлял/менял) и т.д. И потому в данном случае хранение в базе мне представляется более разумным, у них и объем небольшой и консистентность обеспечить проще.

Если же речь идет о вещах наподобие видео/файловых хостингов, то тут конечно БД не подойдет однозначно.

P.S. Хотя для ютюба и обычная ФС не подойдет, объемы уже не те. Поищи на хабре статью про Google File System.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Gunslinger
Дата 22.9.2010, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(LSD @  22.9.2010,  20:26 Найти цитируемый пост)
На которые будут ссылки из других таблиц, для которых нужен аудит (кто и когда добавлял/менял) и т.д. 

Пока четкого ТЗ нет, только наброски. Схема такая: есть несколько категорий, по которым раскладываются документы (пользователь определяет категорию). Но некоторые документы могут подпадать сразу под несколько категорий. Выбрав категорию, можно получить все документы, которые в ней находятся (с "кросс" документами пока не знаю, наверное спец.пометку ставить) и пользователей, которые их создали. 
Контроль тот, который вы и описали. 

Цитата(LSD @  22.9.2010,  20:26 Найти цитируемый пост)
наподобие видео/файловых хостингов

Для видео есть другие хостинги, тот же ютюб. Не вижу смысла его дублировать, если можно подгружать видео с него, а у себя только окно плеера расположить (если пользователю потребуется).


PM MAIL   Вверх
LSD
Дата 23.9.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(Gunslinger @  22.9.2010,  21:53 Найти цитируемый пост)
Схема такая: есть несколько категорий, по которым раскладываются документы (пользователь определяет категорию). Но некоторые документы могут подпадать сразу под несколько категорий. Выбрав категорию, можно получить все документы, которые в ней находятся (с "кросс" документами пока не знаю, наверное спец.пометку ставить) и пользователей, которые их создали.

Обычная связь многие ко многим.


Цитата(Gunslinger @  22.9.2010,  21:53 Найти цитируемый пост)
Для видео есть другие хостинги, тот же ютюб. Не вижу смысла его дублировать, если можно подгружать видео с него, а у себя только окно плеера расположить (если пользователю потребуется).

А кто первый привел пример с flv? smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.