Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090

Организация данных в бд

22.03.2016, 14:43. Показов 943. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Никак не могу определиться с организацией базы данных. Ситуация такая: нужно записать в таблицу сложные данные, состоящие из нескольких определённых полей (id, дата, имя, и т.п.) + неопределённого количества неопределённых полей. Проблема, как вы понимаете, в неопределённых полях. Вот я и думаю, как лучше поступить... Самый простой способ, конечно, решить проблему втупую: просчитать все возможные варианты, и создать таблицу с большим количеством полей "на все случаи жизни". Второй вариант - создать одну ячейку для всех неопределённых полей, и писать их туда в формате csv. И третий вариант - я нашёл в интернете, что с помощью serialize можно отправить в таблицу готовый массив. Но там была приписка, что при большом объёме данных, этот способ очень тормознутый. А у меня как раз большой объём данных. Как я понял, это касается и второго варианта, т.к. в обоих случаях придётся создавать поле неограниченного размера, что, видимо, не есть хорошо. Собственно вопрос, что мне делать? Сразу говорю, разбить на несколько таблиц - не вариант.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2016, 14:43
Ответы с готовыми решениями:

Организация базы данных
Приветствую всех и каждого! Перейду сразу к делу. Цель: создать приложение (сервер-клиенты) для организованной работы коллектива...

Двоичное дерево, как организация данных
Здравствуйте! Прошу вашей помощи! :help: У меня 3 вопроса по двоичным деревьям. Помогите, пожалуйста! :gscratch: 1. Удовлетворяет ли...

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

11
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
22.03.2016, 14:56
ChildOfFlowers, Тут либо второй либо третий вариант. Со вторым тяжелее будет искать необходимый элемент , а с третьим вариантом я не знаю как вы поступите, когда необходимо будет еще поля добавлять - надо будет десериализовать со старым набором колонок перевести в новый и в каждую строку по новому посадить... Создавать базу, не зная какие у вас будут поля не совсем верный подход... Значит вы еще и структуру проги не знаете и как обрабатывать данные. Вы же не будете с каждым новым полем менять свой код?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
22.03.2016, 15:18
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Никак не могу определиться с организацией базы данных
В свое время работал с OeBS - это крупная ERP-система от Oracle. Там можно было настраивать некоторые параметры, не привлекая программистов. Так вот, во всех таблицах, где были возможны такие записи, кроме обязательных полей были заведены по 30 полей типа varchar2.
Как я понимаю, этот подход похож на твой 1-й вариант. Остальные два - это нереляционный подход со всеми вытекающими, начиная от сложностей выборки, модификации, и кончая контролем целостности данных.
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
22.03.2016, 15:46  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
Создавать базу, не зная какие у вас будут поля не совсем верный подход
Я пытаюсь сделать что-то типа органайзера... или продвинутой телефонной книги чтоли... В общем, суть такая: имеется набор стандартный набор полей для описания контакта. И в добавок к этому, пользователь должен иметь возможность добавлять свои поля по желанию. Соответственно, я не могу знать заранее, что это будут за поля, и сколько их будет.
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
Значит вы еще и структуру проги не знаете
Ну в общем да... но это и правильно. Как раз по ходу написания программы я пришёл к выводу, что надо плясать не от кода, а от структуры данных.
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
с третьим вариантом я не знаю как вы поступите, когда необходимо будет еще поля добавлять
Да тут, по-моему, как раз проще, чем со вторым вариантом. Если, конечно, я всё правильно понимаю... Берём массив из ячейки, добавляем в него новый ключ-значение, и перезаписываем в ячейку. Разве не так?
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
либо второй либо третий вариант
Меня больше всего волнует вопрос производительности таких вариантов. Потому что данных будет действительно много.
В случае с массивом, мне ещё не понятно, в каком формате sql будет возвращать данные. И вообще, чем это отличается от csv? И можно ли будет производить поиск и сортировку по таким полям? Мне надо, чтобы было можно... в этом, собственно, вся задумка.

Добавлено через 9 минут
Цитата Сообщение от Grossmeister Посмотреть сообщение
кроме обязательных полей были заведены по 30 полей
Да, я думал о чём-то подобном... Т.е. создать N количество полей с именами, допустим, 1, 2, ... 30. Но тут вопрос, как пользователю именовать такие поля? Создавать для каждого пользователя отдельную таблицу "№ поля - имя" - плохой вариант, будет миллион таблиц. А писать в каждой ячейке "имя - значение" - получится что-то похожее на 2 и 3 вариант...
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
22.03.2016, 15:55
ChildOfFlowers,
Я бы сделал проще. Создаем 3 таблицы:
1. Users (UserId,Name,Age....) - ну личная инфа
2. Colonki(ColonkiId,Name) -здесь храните(добавляете,удаляете) все возможные колонки для ваших пользователей
3. Table3(IdTable3,ColonkiId,UserId,ValueCo lonka) - а здесь уже храните значение определенной колонки для определенного пользователя.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
22.03.2016, 15:59
Цитата Сообщение от ChildOfFlowers Посмотреть сообщение
Но тут вопрос, как пользователю именовать такие поля?
Есть таблица с описанием метаданных. Когда твой пользователь заводит атрибут "Номер машины", то в метаданных прописывается пара "Номер машины" - fld1. Когда нужно сформировать запрос, то сначала вспомогательным запросом вытаскивается имя нужного поля, а потом в основной запрос вставляется нужное имя. При этом запрос получается вполне реляционным, без всяких выкрутасов. Недостаток - динамическое формирование запроса, поскольку большинство СУБД лучше работают со статическими запросами (они кэшируются при первом выполнении). Но при данных условиях без этого не обойтись.
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
22.03.2016, 16:06
Цитата Сообщение от Grossmeister Посмотреть сообщение
Есть таблица с описанием метаданных. Когда твой пользователь заводит атрибут "Номер машины", то в метаданных прописывается пара "Номер машины" - fld1
Grossmeister, Это вы хорошо придумали
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
22.03.2016, 16:14  [ТС]
SailarmoonKS, Grossmeister, т.е., о чём я и говорил... если сейчас у меня на каждого пользователя по одной таблице "contacts", а будет по две. В общем то, я этого хотел избежать... но если вы говорите, что это лучший вариант...

Добавлено через 1 минуту
или я что-то не так понял?
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
22.03.2016, 16:20
Мне кажется ТС пытается сделать классификацию. А посему - подчиненная таблица со списком всех возможных параметров и их значений. Отдельно обратить внимание на разные типы (тоже несколько вариантов реализации)
Единственный минус - городить кучу case в запросе придется. Но это плата за универсальность
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
22.03.2016, 16:21
В моем случае 3 таблицы, а в случае Grossmeister, создаете 2 таблицы. В первой статичное кол-во колонок -например 50 и помечаете их как field1,2,3..., а во второй таблице держите информацию для пользователя какое именно для каждого пользователя соответствие колонки -название(Для 1-ого пользователя домашнее животное -это field1, снилс - field2... Для второго пользователя номер машины - field1, название животного -field2..) Соответственно зная эту информацию, вы составляете необходимые sql запросы на изменение полей. Пользователь решил поменять свой номер телефона и нажимает сохранить - ваша программа обращается ко второй таблице и находит в каком поле для данного пользователя содержиться номер телефона и составляет запрос на изменение именно этого поля
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
22.03.2016, 16:23
Цитата Сообщение от ChildOfFlowers
если сейчас у меня на каждого пользователя по одной таблице "contacts", а будет по две.
Где я писал про две? Одна таблица, где есть обязательные поля и поля fld1..fld30. А что в этих полях - разрешаем через метаданные.
Можно вообще иметь одну таблицу contacts, где с пом. доп. поля owner можно определить, чьи это контакты. Тогда в таблице метаданных тоже будет поле owner, где показано, что для этого пользователя fld1 - это номер машины, для другого - день рождения ребенка и т.д.
0
 Аватар для ChildOfFlowers
15 / 14 / 9
Регистрация: 16.04.2012
Сообщений: 1,090
23.03.2016, 18:39  [ТС]
Grossmeister, не пинайте, если туплю... просто слишком много всего приходится обдумывать. Значит, как я понял, имеется таблица "users" со списком всех пользователей, их логинами, паролями, и т.д. И в ней же есть поле, в котором прописаны для каждого пользователя имена и псевдонимы полей в его таблице "contacts". Так чтоли?...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2016, 18:39
Помогаю со студенческими работами здесь

Правильная организация хранения исторических данных для существующей БД
Приветствую всех! Передо мной стоит задача организовать сохранение исторических данных для существующей БД. Организация занимается...

Организация данных в таблице
БД MSSql 2008. Проблема в следующем. Требуются идеи по организации структуры таблицы. Таблица путевых листов автомобилей (waybills). ...

Организация базы данных
Возник такой вот вопрос Есть один проект где есть пользователи со всей структурой таблиц для них, есть товары со структурой для нее и...

Организация данных
Здравствуйте. Подскажите, пожалуйста, с таким вопросом: как правильно организовать структуру в БД У меня есть база данных, в которой...

Организация базы данных с прайсами
Доброго дня! Я столкнулся со след проблемой: Не могу сообразить как мне из всего разнообразия прайсов поставщиков свести все к виду...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru