| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Выбрать данные из хитрой базы |
| Автор: svug 10.10.2006, 12:24 |
| База для записей произвольной формы. Т.е. разные типы записей имеют произвольный набор полей. Таблицы под каждый тип записи создавать нельзя. Таблица1. Records - список записей ID - номер записи RecTypeID - тип записи Таблица2. RecField - список полей у типа записи ID RecTypeID - тип записи FieldTypeID - тип поля Для простоты - поля могут быть Строками и Датами: Таблица3. TextTable ID - RecordID - ID записи(Таб.1) RecFieldID - ID поля (Таб.2) Text - данные Таблица4. TableDateTime ID - RecordID - ID записи(Таб.1) RecFieldID - ID поля (Таб.2) DateTime - данные Например: Тип записи-человек Поля - Имя,Фамилия,День рождения Надеюсь, понятно объяснил суть. Все таблицы не выписывал, упростил. Вопросы: 1. Хороша ли структура? 2. Если да, то КАК Добавлено @ 12:34 ещё есть Таблица0. RecType-Тип записи ID Name ....без нее как то непонятно.... |
| Автор: Paradox 10.10.2006, 13:47 | ||
| хороша для чего ? для выборок просто отлично подходит, вы уже третий день бьетесь как реализовать их с такой структурой. а вообще наверное что то типа такого:
ЗЫ для чего такая структура то ? |
| Автор: Orb 10.10.2006, 13:50 |
| есть куча книг по базам данных почитай |
| Автор: bas 10.10.2006, 15:55 |
А как из Таблица3. TextTable выбрать Имя,Фамилия или Фамилия,Имя ? |
| Автор: svug 10.10.2006, 19:33 |
Для того что запускает пользователь программу и создает запись "Человек" и поле фамилия - первый случай. Второй- Человек и поля: Ф, И, О, номер паспорта, количество детей, кличка тещи, и т.д. Вот поэтому нужна такая (или другая) структура. И ещё, если не ошибаюсь, то MSSQLServer ограничивает количество столбцов в таблице 1024. У меня количество типов записи и количество полей в теории не ограничено. Поэтому динамически создавать таблицы - неподходит. Вообще задача чисто теоретическая и для меня крайне занимательная, так что отговорки про скотч и гвозди не принимаются "а вообще наверное что то типа такого" -неа, видимо меня не правильно поняли. Нужен результат вида: Фамилия Имя ДР ДРТещи иванов петя 1.1.2006 2.2.2006 сидоров иван 3.3.2000 4.4.2006 .... ФИО-текст, ДР-даты, и ещё может быть произвольное количество дат, все они лежат в TableDateTime, но с разными RecFieldID. Надеюсь, прояснил ситуацию. |
| Автор: Stampede 10.10.2006, 20:24 | ||||
svug, в такой структуре, как у тебя, получить данные в классическом табличном виде не получится. Вернее, получится, но очень страшной ценой - соединением множества алиасов одной таблицы. Но это и без надобности. Тебе надо в программе (на чем пишешь-то?) просто правильно обрабатывать запросы такого вида:
Такой запрос вернет тебе кучу записей:
Поскольку результаты у тебя отсортированы по ID, то ты можешь смело перебирать все строки подряд, и пока ID один и тот же, заполнять массив свойств объекта значениями из TextTable.text. Как пойдет следующий ID, это будет сигналом, что предыдущий объект полностью сформирован, и нужно инициализировать новый. Если говорить о данной структуре вообще, то (а) подход не новый, (б) имеет серьезные ограничения, (в) потребует больших программистских усилий, которых при отсутствии хороших навыков программного дизайна может все равно не хватить. Зато предоставляет очень гибкую динамическую среду хранения. Так что, как говорится, думайте сами, решайте сами... |
| Автор: svug 10.10.2006, 21:21 |
| хорошая мысль, попробую..... да, кажется их должно быть столько же сколько и полей, т.е. имеем зависимость от типа записи. Нельзя ли прикрутить сюда вложенные запросы... ещё идея: может всё-таки на серваке формировать результат с помощью ХП?? нда... будем думать... C# |
| Автор: Stampede 10.10.2006, 21:34 | ||||
Это-то как раз не страшно, если формировать запрос динамически, из проги. Были бы только метаданные. А вот то, что соединений куча - это фатально. Но, еще раз повторяю, можно обойтись и без табличного представления данных. Условия в данной структуре выражаются несколько иным способом.
А вот это как раз приведет к фиксирванию типов - на уровне текстов процедур. Стоило ли тогда огород городить? |
| Автор: jack128 17.10.2006, 17:24 |
| качаешь отсюда полный сборник статей Тенцера http://podgoretsky.com/ddp.html . Где то там есть описание подобной структуры БД. И сидишь - изучаешь. |
| Автор: svug 19.10.2006, 15:48 |
| нашел, вроде оно.... http://foxserver.narod.ru/tenser.htm |