Avatar billede Slettet bruger
10. juli 2006 - 09:30 Der er 7 kommentarer og
3 løsninger

Dynamiske attributter på tabel

Hej eksperter!

Jeg skal lave et system, der bygger på en database tabel. Hvilke atributter, der ønskes registreret for hver post varierer meget over tid, og der er desuden mange (ca 80) atributter i tabellen fra start.

Jeg ønsker at lave mit system, så man selv kan fjerne visse atributter og desuden oprette nye på den database tabel, der ligger bag systemet.

Hvordan er det smartest at lave dette? Skal jeg lave en "ALTER TABLE" hver gang brugeren opretter en ny attribut, og så tilføje den direkte i tabellen? Eller skal jeg lave en tabel, der hedder noget i retning af "atributter" og "attribut værdier" og så lade disse to ekstra tabeller håndtere de dynamiske attributter?

Ved 80 atributter, så er jeg bange for at metoden med at køre det i støtte-tabeller ikke vil performe særlig godt. Og det besværliggør søgning.

Men på den anden side - at lave et program, der "piller" direkte ved tabelstukturen med ALTER TABLE - Det lyder både farligt og uholdbart i mine ører.

Nogen, der har været ude i noget af det samme?
Avatar billede pgroen Nybegynder
10. juli 2006 - 09:51 #1
Du skal helt klart IKKE lave noget griseri med ALTER TABLE, derimod er din idé om en attribut-tabel lige efter bogen...

Og hvorfor skulle der være performance-issues ved at joine til en separat attribut-tabel; hvis dine indekser i øvrigt er på plads, burde det ikke være noget problem.

Besværliggjort søgning - tjah, så er det vel heller ikke værre; om ikke andet, så kunne man jo lave nogle views ovenpå de to tabeller...
Avatar billede Slettet bruger
10. juli 2006 - 11:06 #2
Mange tak for dit svar - det har givet anledning til yderligere overvejelser. Jeg sad netop blot og havde brug for noget "frisk" input udefra, så mange tak for det!

Du må gerne lægge et svar, så vil jeg give point.
Avatar billede teepee Nybegynder
10. juli 2006 - 11:46 #3
I Microsoft Dynamics CRM har de oprettet en extension tabel som har en 1-1 relation til en anden tabel som indeholder core-attributter (kolonner) som der ikke kan rettes i. Men i extension tabellen bliver der flittigt oprettet og fjernet kolonner efter brugernes behov. Noget tilsvarende er gjort i SAP Business One.
Avatar billede Slettet bruger
10. juli 2006 - 13:38 #4
Interessant teepee - meget interessant faktisk.
Avatar billede arne_v Ekspert
11. juli 2006 - 02:19 #5
der er jo nok en grund til at det rask væk koster 100 millioner kroner at
implementere SAP i en virksomhed ...

:-)
Avatar billede arne_v Ekspert
11. juli 2006 - 02:23 #6
Grundliggende er der 3 måder at håndtere den slags data på:

1) forskellige tabeller
2) en tabel + en hjælpe tabel med name+value
3) en tabel med en kolonne med XML som indeholder alt det specifikke

Selvom #1 bruges en del så mener jeg ikke at den kan bruges i dette tilfælde
hvor det er slutbrugerne som sidder og ændrer data strukturen.

#2 er den generiske løsning.

Men hvis der aldrig skal laves WHERE eller JOIN ON på de ekstra data men at de
kun skal vises så er #3 et alternativ.
Avatar billede pgroen Nybegynder
11. juli 2006 - 09:17 #7
Ja, hvorfor lave sit eget system, når man kan købe hyldevarer som Applications og SAP...:-)
Avatar billede Slettet bruger
11. juli 2006 - 23:11 #8
Jeg vil igen takke jer for nogle gode, saglige svar. I er alle meget velkomne til at give et svar. Så vil jeg lukke spm.
Avatar billede arne_v Ekspert
12. juli 2006 - 03:04 #9
.
Avatar billede teepee Nybegynder
12. juli 2006 - 09:54 #10
Derfor kan man jo godt tage ved lære af hvorledes de "store" løsninger er banket sammen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester