powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Организация структуры БД Oracle, Entity Framework
16 сообщений из 16, страница 1 из 1
Организация структуры БД Oracle, Entity Framework
    #36408814
g_box
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для работы с БД Oracle используетс Entity Framework (.NET 3.5) как лучше организовать структуру из расчета возможности EF?

Создаю небольшую технологическую БД где необходимо хранить
параметры (
имя
ед. измерения
аварийные границы и т.д.,
срок хранения
тип
)
и их значения строковые,целые либо с плавающей точкой с фиксацией даты и время

Количество параметров от 1000 , частота импорта значения от 1сек. (ежечасно,сутки и т.д.)
Каким образом реализовать структуру БД для хранение данных и их выборки с точки зрения профессионалов?
Правильно ли использовать такую структуру ?

Код: plaintext
1.
2.
3.
4.
5.
6.
Таблица ПАРАМЕТР
[p_id, -идентификатор
p_name, -имя
imz_id, - идентификатор ед измерения
store_id - идентификатор хранилища(таблицы)
........]

Код: plaintext
1.
2.
3.
4.
5.
6.
Таблица ХРАНИЛИЩА
[store_id, - идетификатор
store_name, - имя
type_id - тип данных
period - переиод хранения
]

Код: plaintext
1.
2.
3.
4.
5.
Таблица ТИПЫ
[type_id, - идетификатор
type_name, - имя
oracle_type - тип данных Oracle
]

Код: plaintext
1.
2.
3.
4.
Таблица ИЗМЕРЕНИЯ
[izm_id, - идетификатор
izm_name, - имя
]
на таблицу ХРАНИЛИЩА вешаю триггер где создаю доп. таблицу с заданной структурой и типом поля хранения

Код: plaintext
1.
2.
   exec_str:= 'CREATE TABLE Store_'||:NEW.store_id||' (p_id NUMBER NOT NULL, p_date date, p_val '||:NEW.oracle_type||' NOT NULL)';
   execute immediate exec_str;
так же удаляю триггером

Может есть путь легче?
Как выбирать данные из таблиц хранилищ? STORE_1......N c полем p_val разного типа при помощи VIEW? PROCEDURE? и привязать их сущностям для удобства програмимрования?

Спасибо! буду признателен за любую критику и помощь
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36408850
vinvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то очень туманно с предметной областью. Не очень понятен смысл.
Ты хочешь хранить в таблицах какие-то метаданные?
Обычно это делается, когда в приложении необходимо динамически менять структуру (т.е. добавлять-удалять столбцы). В твоем случае я этого что-то не увидел (или не понял).

Есть один совет - не привязывайся к триггерам - это геморой почти обеспеченный. Пользуйся процедурами.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36408951
Курочка Ряба
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g_boxПравильно ли использовать такую структуру?
Это вопрос не по Entity Framework.
Вам в форум Проектирование БД .

P.S. Когда будет готова структура, тогда можно обсуждать и ORM.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36408959
g_box
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vinvin
Ты хочешь хранить в таблицах какие-то метаданные?


нет обычные данные например

Параметр: Расход воды мнгн, его значение 12,3 храняться в таблице STORE_1 в поле p_val(number)
Параметр: Расход воды сутки, его значение 12450,3 храняться в таблице STORE_2 в поле p_val(number)
Параметр: Установка Подогрева, его значение "В работе" храняться в таблице STORE_3 в поле p_val(varchar)

в итоге в таблице STORE_2 - все суточные значения типа number и период хранения например 25 лет
в итоге в таблице STORE_1 - все мнгновенные значения типа number и период хранения например 6 месяцев
и т.д.

Можно и процедуру смысл динамически создавать новые ХРАНИЛИЩА - таблицы STORE_N
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409008
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. у нас есть параметры (много)
2. у нас есть ограниченное количество типов данных которые могут принимать параметры
строковые,
целые
плавающей точкой
дата и время

тогда может попробовать следующее:


Код: plaintext
1.
2.
3.
Таблица ПараметрыСправочник
 ПараметрИД
 ПраметрИмя
 ПараметрТип


Код: plaintext
1.
2.
3.
Таблица Измерения
 ИзмерениеИД
 Измерение...
 


Код: plaintext
1.
2.
3.
Таблица ДанныеИзмеренийЦелое
 ИзмерениеИД
 Параметр
 Значение (Целое)


Код: plaintext
1.
2.
3.
Таблица ДанныеИзмеренийСтрока
 ИзмерениеИД
 Параметр
 Значение (Строка)


Код: plaintext
1.
2.
3.
4.
Таблица ДанныеИзмеренийПлавТочка
 ИзмерениеИД
 Параметр
 Значение (ПлавТочка)


Код: plaintext
1.
2.
3.
Таблица ДанныеИзмеренийДатаВремя
 ИзмерениеИД
 Параметр
 Значение (ДатаВремя)


Поставить триггер (ограничение) на то чтобы нельзя было вставлять
параметр с типом ПлавТочка в таблицу ДанныеИзмеренийЦелое к примеру.

Далее в программе расскидываете данные по таблицам.

Преимущество данной структуры в том что все ваши параметры типизированы
и в бд. храняться с явным указанием типа.

Возможно есть лучший вариант, подумайте.

--
PS
Не нужно генерировать таблицы в триггерах.
А то на этот ваш вопрос никто не ответит в последствии:
авторКак выбирать данные из таблиц хранилищ? STORE_1......N c полем p_val разного типа при помощи VIEW? PROCEDURE? и привязать их сущностям для удобства програмимрования?
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409049
g_box
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курочка Ряба
P.S. Когда будет готова структура, тогда можно обсуждать и ORM.

Согласен я не архитектор БД, но программисты работая с Entity скорее всего постоянно сталкиваются с корявыми ручками проектировщиков БД, поэтому с начало вопрос задал здесь.

Вероятно нужно подойти с середины задачи и промоделировать какие необходимы сущности, как с ними программно работать и выбирать данные и после этого переложить на структуру таблиц БД?

К сожалению не нашел ни одного примера проекта показывающего реальное использование EF.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409100
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g_box[quot Курочка Ряба]
Вероятно нужно подойти с середины задачи и промоделировать какие необходимы сущности, как с ними программно работать и выбирать данные и после этого переложить на структуру таблиц БД?


Можно использовать и такой подход ef -> db, но ясно лишь одно entity framework не работает с динамическими объектами которые вы хотите генерить триггером (я про хранилища). После нового сгенеренного хранилища нужно обновить EF модель программисту.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409107
Курочка Ряба
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g_boxпрограммисты работая с Entity скорее всего постоянно сталкиваются с корявыми ручками проектировщиков БД
Ну так проблему нужно решать с корня, а не наоборот. Сделайте нормальную схему, удовлетворяющую хотя бы 3 НФ, а потом в бой в Entity.

g_boxВероятно нужно подойти с середины задачи и промоделировать какие необходимы сущности, как с ними программно работать и выбирать данные и после этого переложить на структуру таблиц БД?
С середины не надо, надо с самого начала - спланируйте нормальную схему в БД :)

g_boxК сожалению не нашел ни одного примера проекта показывающего реальное использование EF.
Я Вам покажу, только сначала организуйте схему. А маппить, простите, гавно на лопате на генеренные классы - это уже будет не проект, а свалка мусора.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409117
Курочка Ряба
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала давайте решать вопрос с триггерами: какую задачу решают триггеры у Вас?
Если есть возможность избежать ту или иную хп, лучше это сделать.

P.S. Под оракл я, всё-таки, посоветовал бы проверенное решение: NHibernate.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409133
g_box
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Затуливетер
Код: plaintext
1.
2.
3.
4.
Таблица ДанныеИзмеренийПлавТочка
 ИзмерениеИД
 Параметр
 Значение (ПлавТочка)


Спасибо за ответ, этот способ тоже рассматривается, а каким образом решить задачу :

значения 150-ти параметров с плавающей точкой нужно хранить 6 месяцев
значения 1500-т параметров с плавающей точкой нужно хранить неделю
значения 500-т параметров с плавающей точкой нужно хранить 25 лет

при чем 1500 параметров которые нужно хранить неделю являются оперативными и вносяться в БД с частотой раз в 30 сек, и при этом данные выбираются для различных UI и отчетов? а таблица одна
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409188
g_box
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курочка РябаСначала давайте решать вопрос с триггерами: какую задачу решают триггеры у Вас?
Если есть возможность избежать ту или иную хп, лучше это сделать.

P.S. Под оракл я, всё-таки, посоветовал бы проверенное решение: NHibernate.

Триггер создает новую таблицу хранилища STORE_N для хранения значений определенно типа и определенной переодичности, как Вы сказали новую сущность которую необходимо обновить программно что геморой

может использовать процедуры и view для работы с данными таблицами в нутри oracle и создания одной абстрактной сущности например VALUE (p_val,p_date)+ по p_id связать с параметрами? или я намудрил :(

за совет спасибо, обязательно сравню.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409243
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Таблица ПараметрыСправочник
 ПараметрИД
 ПраметрИмя
 ПараметрТип
 ХранитьСтолькоВремени (тут указывается для каждого параметра сколько его хранить, для всех типов в том числе и для плав точки)

авторпри чем 1500 параметров которые нужно хранить неделю являются оперативными и вносяться в БД с частотой раз в 30 сек, и при этом данные выбираются для различных UI и отчетов? а таблица одна

Вы боитесь блокировок на таблицу, т.е. различные приложения будут бороться за доступ к ней?
Но это легко решается с установкой необходимого уровня излоляции транзакции.

в ms sql server например есть уровень изоляции снепшот set transaction isolation level snapshot
позволяет считывать данные из таблицы даже во время их вставки, т.е. совершенно не блокируя таблицы.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409310
g_box
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Затуливетер
Вы боитесь блокировок на таблицу, т.е. различные приложения будут бороться за доступ к ней?


Вы правы это настраивается, есть опасение разрастания таблицы через 2-3-4 года не хотелось бы иметь несколько миллионов записей
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409368
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g_boxВладимир Затуливетер
Вы боитесь блокировок на таблицу, т.е. различные приложения будут бороться за доступ к ней?


Вы правы это настраивается, есть опасение разрастания таблицы через 2-3-4 года не хотелось бы иметь несколько миллионов записей

Вы на форум оракла это напишите, уверен что на вас обрушится куча людей.
Таблицы могут хранить очень большое количество строк сотни милионов, милиарды.
Для доступа к необходимым данным вы используете выборки.
Выборки с определенными фильтрами, к примеру по датам за последнюю неделю.
Далее в ход идут ИНДЕКСЫ которые вы не забыли создать в своей БД.
За чет них выбираются только нужные данные, только те 10000 записей которые необходимы.
Игнорируя и даже не обращаясь к остальным 10 милионам.


Если вы не полагаетесь на механизмы СУБД то можете реализовать архивные таблицы,
т.е. каждая из таблиц у вас разделяется на 2, архив и текущие данные и время от времени
не нужные данные перебрасываются в архив.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409466
g_box
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Затуливетер
Вы на форум оракла это напишите, уверен что на вас обрушится куча людей.
Таблицы могут хранить очень большое количество строк сотни милионов, милиарды.
Для доступа к необходимым данным вы используете выборки.
Выборки с определенными фильтрами, к примеру по датам за последнюю неделю.
Далее в ход идут ИНДЕКСЫ которые вы не забыли создать в своей БД.
За чет них выбираются только нужные данные, только те 10000 записей которые необходимы.
Игнорируя и даже не обращаясь к остальным 10 милионам.

Если вы не полагаетесь на механизмы СУБД то можете реализовать архивные таблицы,
т.е. каждая из таблиц у вас разделяется на 2, архив и текущие данные и время от времени
не нужные данные перебрасываются в архив.

Согласен, но даже серьезные тех. ситему не используют одну таблицу к примеру три таблицы
1-я таблица все данные (допустим 1раз в минуту) - храняться месяц
2-я таблица все данные - усредняются из первой за 10 минут
3-я таблица усредняются за час - при чем после усреднений данные из источников удаляются соответственно

Хорошо спасибо Я Вас понял в данном случае действительно нужно создать сперва БД хотя бы 3НФ без динамического создания таблиц, а затем использовать EF.
...
Рейтинг: 0 / 0
Организация структуры БД Oracle, Entity Framework
    #36409788
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы про усреднение ранее не говорили, замечу.

Это таже история что с архивированием,
только у вас больше таблиц,
причем каждая последующая содержит более сжатые данные.

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

При таком подходе "сжатия данных" вам потребуется время на обработку.
Т.е для переброски данных в архивные таблицы нужны ресурсы, и время, это нужно учесть при проектировании.

Можно создать в своей БД несколько таблиц.
К примеру вариант такой, всегда оставлять первоначальные данные в таблице
И на основе ее заполнять таблицы сжатых данных
10 мин, 1 час, 24 часа... и тд.
Благодаря этому вы всегда можете получить доступ к первоначальным данным, кото знает может скоро они вам понадобятся.

Можно рассмотреть варианты с OLAP.

К той структуре которую я вам предлагал ранее с 6 таблицами

Таблица ПараметрыСправочник
Таблица Измерения
Таблица ДанныеИзмеренийЦелое
Таблица ДанныеИзмеренийСтрока
Таблица ДанныеИзмеренийПлавТочка
Таблица ДанныеИзмеренийДатаВремя

добавляются еще таблицы:

Таблица ДанныеИзмеренийЦелоеСжатые10мин
Таблица ДанныеИзмеренийСтрокаСжатые10мин
Таблица ДанныеИзмеренийПлавТочкаСжатые10мин
Таблица ДанныеИзмеренийДатаВремяСжатые10мин

Таблица ДанныеИзмеренийЦелоеСжатые60мин
Таблица ДанныеИзмеренийСтрокаСжатые60мин
Таблица ДанныеИзмеренийПлавТочкаСжатые60мин
Таблица ДанныеИзмеренийДатаВремяСжатые60мин

Таблица ДанныеИзмеренийЦелоеСжатые24часа
Таблица ДанныеИзмеренийСтрокаСжатые24часа
Таблица ДанныеИзмеренийПлавТочкаСжатые24часа
Таблица ДанныеИзмеренийДатаВремяСжатые24часа

и т.д...

Если необходимо предусмотреть связь сжатых данных с несжатыми.

Вариантов тут куча, главное таблиц не генерить динамических.
Не создавать изначально проблем, чтоб героически их потом решать ;)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Организация структуры БД Oracle, Entity Framework
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]