2012-02-28 2 views
2

Возможно, это немного причудливо, но есть ли какой-либо шаблон или что-то для хранения любого объекта в Реляционная база данных (не nosql) оптимальным образом?Сохранение любого объекта в реляционной базе данных

, например, ни в оптимальном виде:

class Person{ 
    string FirstName {get;set;} 
    string LastName {get;set;} 
} 

class Product{ 
    string Name {get;set;} 
    decimal Price {get;set;} 
} 

и в базе данных:

CREATE TABLE Data 
    (Id int PRIMARY KEY, 
    TypeName nvarchar(50), 
    PropertyName nvarchar(50), 
    PropertyValue binary) 

то записи сохраняется в базе данных, как это:

1 Person FirstName Jalal 

2 Person LastName A.R 

3 Product Name  Apple 

4 Product Price  2 
+1

Это то, что NHiberate для (http://nhforge.org/Default.aspx). – Yuck

+1

NHiberate отображает объекты в отдельных таблицах! для моего примера он хранит людей в таблице «Персона» и в таблице «Продукт». – Jalal

ответ

3

То, что вы описываете в основном стол Entity-Attribute-Value.

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

Неправильно используется, это классический пример Inner Platform Effect.

2

Вы можете сериализовать свой объект в XML и сохранить его в базе данных. SQL Server имеет специализированный тип XML, который даже позволит вам запрашивать содержимое.

Это не оптимальное решение, но оно будет делать то, что вам нужно.

+0

мммм, я должен посмотреть :) – Jalal

+0

-1 Держитесь подальше от XML –

0

Не знаете, почему вы сделали бы это как вряд ли оптимальным. Если вы ищете человека, вы будете искать сканирование таблицы/индекса со строковым значением, а затем фильтровать по первичному ключу.

ОРМА был бы гораздо более лучше- NHibernate или Entity Framework (EF) они будут отображает каждый класс к столу и autogenerat ETH первичных ключей и т.д., и вы можете выразить объекты как объекты ребенка и т.д.

EF может также сначала сделайте код - это означает, что вы просто напишите классы, и он будет создавать базу данных и автоматически отображать их все (nHibernate, вероятно, также делает это, просто я тоже не знаю товар)

0

То, что вы описали, не является реляционный подход, поэтому я не понимаю, почему вы хотите использовать реляционную базу данных. Вы объединяете каждый объект в один большой стол. Вы полностью теряете способность определять отношения между таблицами или выполнять реляционные операции (например, «найти всех клиентов, которые купили яблоко в этом месяце»).

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