0

Я имею дело с большим количеством подобных классов Event, которые необходимо хранить в БД. Они все наследуют от AbstractEvent и реализуют интерфейс IEvent. Основное различие заключается в их свойствах:Хранение большого количества объектов похожих, но разных классов в БД

RainStartsEvent 
    TimeRainStarted: Time 
    LitresOfRainPerSquareMeter: Float 
    RainTemperature: Integer 

SunUpEvent 
    TimeSunUp: Time 
    PersonWhoSawItFirst: Integer 
    Brightness: Float 
    SongOfTheDay: String 

SomeOtherEvent 
    UniquePropery1: someType 
    StandardProperty: someType 

и так далее. Там будут десятки или даже сотни Events, и они потенциально не имеют ничего общего, кроме того, что они наследуют форму AbstactEvent и реализуют с IEvent.

Теперь мне нужно сохранить эти объекты в базе данных. Я думал об одностраничном наследовании или на уровне иерархии наследования, но это не имеет смысла из-за большого и постоянно растущего числа Events. Я бы закончил таблицу, которая превышает 255 полей.

Другая идея, которую я имел, заключается в том, чтобы хранить все Events в одной таблице и все их свойства в другой таблице, по одному свойству в строке с внешним ключом в таблице Events. Однако это означало бы, что я должен хранить их все как строку и выполнять сериализацию (де), т. Е. Это может не очень хорошо работать в системе с большим количеством Events.

Нужно ли использовать сериализацию объектов .NET, чтобы сделать это лучше? Это поможет?

Что еще возможно? Должно быть более стандартное решение этой проблемы, какая-то лучшая практика или шаблон дизайна. Есть идеи?

ОБНОВЛЕНИЕ: данные необходимо читать непрерывно и обновлять редко. Запись будет полностью прочитана, не будет упорядочено, где предложение, условные операторы или индексы в БД

+0

Вы можете использовать столбец XML для хранения этих дополнительных столбцов. Это было бы не идеально, если бы вы хотели запросить эти столбцы, но если вы только фильтруете/сортируете по общим столбцам, это может иметь смысл. – JohnLBevan

+0

Вы должны сказать, что вам нужно с базой данных (индексирование, поиск и т. Д.), Как указывают несколько ответов. – Fuhrmanator

ответ

0

Похоже, вы просто хотите сохранить данные. То, что вы не сказали, если вы хотите проиндексировать, запрашивать и т. Д. По этим данным?

Вы можете CONVER их JSON и Stroe их в качестве строки в MS SQL Server (или большинство RDBMSes там), но если у вас есть luxyry или везение, имеющий PostreSQL он имеет встроенную поддержку для JSON data types с некоторыми querying mechanism также.

Другое решение - если решение больше о данных и не использует модель отношения приемлемо - было бы идти с Document Database, как MongoDb или RavenDB, так что вам все равно (или ограничено) ограничениями что базы данных отношений, опять же по большей части - навязывают вам.

0

Это действительно звучит так, как будто вам нужно что-то другое, чем традиционная СУБД, поскольку вы ничего не делаете с данными вне набора и получаете. Поэтому вам следует изучить различные опции NoSQL.

Однако, (как раз, чтобы он сказал), если вы собираетесь использовать SQL Server:

Смежные вопросы