Я имею дело с большим количеством подобных классов 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, чтобы сделать это лучше? Это поможет?
Что еще возможно? Должно быть более стандартное решение этой проблемы, какая-то лучшая практика или шаблон дизайна. Есть идеи?
ОБНОВЛЕНИЕ: данные необходимо читать непрерывно и обновлять редко. Запись будет полностью прочитана, не будет упорядочено, где предложение, условные операторы или индексы в БД
Вы можете использовать столбец XML для хранения этих дополнительных столбцов. Это было бы не идеально, если бы вы хотели запросить эти столбцы, но если вы только фильтруете/сортируете по общим столбцам, это может иметь смысл. – JohnLBevan
Вы должны сказать, что вам нужно с базой данных (индексирование, поиск и т. Д.), Как указывают несколько ответов. – Fuhrmanator