![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
svug |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
База для записей произвольной формы.
Т.е. разные типы записей имеют произвольный набор полей. Таблицы под каждый тип записи создавать нельзя. Таблица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 ....без нее как то непонятно.... ![]() |
|||
|
||||
Coala |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 4.5.2006 Где: Москва Репутация: нет Всего: 0 |
||||
|
||||
Paradox |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
хороша для чего ?
для выборок просто отлично подходит, вы уже третий день бьетесь как реализовать их с такой структурой. а вообще наверное что то типа такого:
ЗЫ для чего такая структура то ? -------------------- --- |
|||
|
||||
Orb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 22.1.2006 Репутация: нет Всего: нет |
есть куча книг по базам данных
почитай Это сообщение отредактировал(а) Orb - 10.10.2006, 13:55 |
|||
|
||||
bas |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
||||
|
||||
svug |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
Для того что запускает пользователь программу и создает запись "Человек" и поле фамилия - первый случай. Второй- Человек и поля: Ф, И, О, номер паспорта, количество детей, кличка тещи, и т.д. Вот поэтому нужна такая (или другая) структура. И ещё, если не ошибаюсь, то MSSQLServer ограничивает количество столбцов в таблице 1024. У меня количество типов записи и количество полей в теории не ограничено. Поэтому динамически создавать таблицы - неподходит. Вообще задача чисто теоретическая и для меня крайне занимательная, так что отговорки про скотч и гвозди не принимаются ![]() "а вообще наверное что то типа такого" -неа, видимо меня не правильно поняли. Нужен результат вида: Фамилия Имя ДР ДРТещи иванов петя 1.1.2006 2.2.2006 сидоров иван 3.3.2000 4.4.2006 .... ФИО-текст, ДР-даты, и ещё может быть произвольное количество дат, все они лежат в TableDateTime, но с разными RecFieldID. Надеюсь, прояснил ситуацию. |
|||
|
||||
Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: нет Всего: 144 |
svug, в такой структуре, как у тебя, получить данные в классическом табличном виде не получится. Вернее, получится, но очень страшной ценой - соединением множества алиасов одной таблицы. Но это и без надобности. Тебе надо в программе (на чем пишешь-то?) просто правильно обрабатывать запросы такого вида:
Такой запрос вернет тебе кучу записей:
Поскольку результаты у тебя отсортированы по ID, то ты можешь смело перебирать все строки подряд, и пока ID один и тот же, заполнять массив свойств объекта значениями из TextTable.text. Как пойдет следующий ID, это будет сигналом, что предыдущий объект полностью сформирован, и нужно инициализировать новый. Если говорить о данной структуре вообще, то (а) подход не новый, (б) имеет серьезные ограничения, (в) потребует больших программистских усилий, которых при отсутствии хороших навыков программного дизайна может все равно не хватить. Зато предоставляет очень гибкую динамическую среду хранения. Так что, как говорится, думайте сами, решайте сами... ![]() |
||||
|
|||||
svug |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
хорошая мысль, попробую.....
да, кажется их должно быть столько же сколько и полей, т.е. имеем зависимость от типа записи. Нельзя ли прикрутить сюда вложенные запросы... ещё идея: может всё-таки на серваке формировать результат с помощью ХП?? нда... будем думать... C# |
|||
|
||||
Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: нет Всего: 144 |
Это-то как раз не страшно, если формировать запрос динамически, из проги. Были бы только метаданные. А вот то, что соединений куча - это фатально. Но, еще раз повторяю, можно обойтись и без табличного представления данных. Условия в данной структуре выражаются несколько иным способом.
А вот это как раз приведет к фиксирванию типов - на уровне текстов процедур. Стоило ли тогда огород городить? |
||||
|
|||||
jack128 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 18.5.2005 Репутация: нет Всего: 4 |
качаешь отсюда полный сборник статей Тенцера http://podgoretsky.com/ddp.html . Где то там есть описание подобной структуры БД. И сидишь - изучаешь.
|
|||
|
||||
svug |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.10.2006 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |