Jag håller på med ett projekt där det finns ett behov av att göra ett antal värdeobjekt beständiga. Eftersom det inte finns någon objektdatabas tillgänglig så har vi försökt att göra en översättning av objekten till en relationsdatabas.
Syftet med det hela är att skapa ett artikelregister där man kan helt fritt kan skapa sina egna kategorier av artiklar och därmed specificera vilka attribut som en kategorikategori skall innehålla. Detta utan att lägga upp nya tabeller så fort man vill lägga upp en ny kategori.
I vår nuvarande lösning har vi bla. separerat artiklarna från dess attribut för att fritt kunna tilldela attribut till en artikel. I databasen blir detta dock fem tabeller bara för att kunna lägga upp artiklarna och dess kategorier. Denna lösning fungerar bra men den är inte speciellt lättarbetat och det känns inte som att det är så bra ur prestandasynpunkt.
Jag funderar därför på om det finns någon bättre lösning...
Går det t.ex. att spara objekten i binär form i databasen om dessa är serializable?
Visst kan du serializera ditt objekt och spara i databasen, både som binärt och som vanlig text.
Denna lösning är nog långsamare än din nuvarande lösning med 5 tabeller. Och du får ALDRIG NÅGONSIN, ändra din class- artikel efter det att du sparat ner den till databas, du kan alltså inte bara lägga till ett nytt fält för du kom på att du måste ha namnet med på artiklen.
Gör du det så stämmer inte det serializerade objektet i databasen överens med din class längre och du kommer få problem när du vill hämta denna data.
Om du använder dig av en O/R-mapper så behöver du inte bry dig om hur många tabeller som du har i databasen, du skriver din class med de variabler som den behöver, och skapar tabellerna som behövs. Efter det när du vill ändra och spara din objekt så kör du bara en save på objektet och den fixar till så att all data hamlar i rätt tabell.
Det betyder att det inte blir svårare att jobba med det systemet än med ett serializerat objekt i databasen.
Dessutom, om man lagrar ett serialiserat objekt som BLOB eller CLOB i en databas kan man ju inte indexera de olika värdena i objekten, vilket lär söla ner än mer.