Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

dinamicke kolone u sql server tabelama

[es] :: MS SQL :: dinamicke kolone u sql server tabelama

[ Pregleda: 1623 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sparc
Sladjan Parc

Član broj: 65760
Poruke: 134
93.86.6.*



Profil

icon dinamicke kolone u sql server tabelama29.11.2009. u 11:16 - pre 175 meseci
Treba da kreiram tabelu za evidencijau razlicitih objekata, na primer dokumenta, osnovna sredstva i sl.
Ti objekti imaju odredjena zajednicka svojstva, koja je lako predstaviti kolonama, koje su pak predstavljene
odredjenim tipom podatka. Medjitim javlja mi se potreba da razliciti objekti imaju razlicite opise. Na primer:
masine imaju instalisanu snagu, fabricki broj i sl, dok zgrade imaju spratnost, povrsinu i sl. Vidi se
da su ova dodatna poljarazlicitih namena i ralizitih tipova. Ovo sam probao da resim sa subtipovima podataka
i relativno sam uspeo. Medjutim tokom eksploatacije projekta dokazuju se potrebe za novim podacima
razlicitih tipova, potrebno je dodati podatke, nekim podacima treba promeniti tip (normalno ako je to moguce) i dr...
Jasno mi je da uvek mogu ispraviti projekat i dotati jos subtipova, medjutim tu se problem koplikuje
sa umnozavanjem subtipskih tabela. Ideja mi je da se u tabelu dodaju ili uklanjaju kolone, pri cemu
treba definisati njihov naziv, tip podatka i kom tipu reda pripadaju. Da je ovo moguce dokazuje sistem
za upravljanje profilima korisnika gde je u web.configu moguce definisati osobine profila i kog su tipa podaci.
(kao ovo radi sistem za upravljanje profilima nisam nasao).
Ima li neko ideju?
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
81.18.62.*

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: dinamicke kolone u sql server tabelama29.11.2009. u 12:45 - pre 175 meseci
Mislim da ti tu ne treba nova kolona nego napravis dve nove tabele, jedna koja ce sadrzati opis, drugu koja ce sadrzati tip i onda bi imao nesto kao

IdProizvoda, (svi tvoji stari podaci), IdOpisa


druga tabela bi imala opis
IdOpisa, TipOpisa i Opis

i treca bi sadrzala sve tipove opisa
TipOpisa, Naziv


i u tu trecu tabelu bi stavio npr:
1, Snaga
2, Fabricki Broj
itd

Ako bi jedan proizvod trebao da sadrzi vise tih 'opisa' mozes dodati trecu tabelu koja bi samo premostavala Proizvod i Opis. Nadam se da sam bio jasan, ako ne, daj nekoliko realnih primera i pokusacu da ti napravim dijagram.
Every hamster has his day.
 
Odgovor na temu

sparc
Sladjan Parc

Član broj: 65760
Poruke: 134
*.static.isp.telekom.rs.



Profil

icon Re: dinamicke kolone u sql server tabelama30.11.2009. u 07:33 - pre 175 meseci
Fedya, pre svega hvala na ukljucivanju u diskusiju.
Nism te dobro razumeo ili ti mene nisi dobro razumeo, postoji vise primera gde
ovo treba primeniti, recimo:
1. Osnovna sredstva i alat.
Zajednicko im je na primer:
Inventarni broj (PK), Naziv, ........ dok
ako je os. masina ima sledece kolone
instalisanaSnaga integer,
fabrBroj varchar(25)
...........
ako je os. zgrada ima sledece kolone
DatumZavrsetkaIzgradnje Date,
DatumTehnPrijema Date,
Sparatnost integer,
PovrsinaSparata integer,
UkupnaPovrsina integer
..............
Ovde je ovo lako resiti sa subtipovima, medjutim ..........
ako se pojavi nova vrsta os. koja ne moze da se uklopi u
neki od navedenih setova podataka, a i glupo je da se u
jednoj ozbiljnoj bazi nesto tako improvizuje, tu nastaje
relativno veliki problem, traba ponovo projektovati bazu, odnosno
dodati subtipsku tabelu, ispravljati trigere, ispravljati stored
procedure i na kraju dodavati, ili ispravljati korisnicki interfejs.
2. Drugi ocigledan primer predstavljaju dokumenta.
Zajednicko im je na primer:
vrstaDokumenta (pk) char(2),
BrojPrijema (pk) varchar(20),
Naslov nvarchar(255),
Author nvarchar(255),
...................
ako je dokument ugovor tada mu trebaju sledece kolone:
VrstaUgovora char(2) - ovde treba da ima reletionship sa tabelom vrsta ugovora
predmetUgovora varchar(255)
Komitent varchar(7)
.........
ako je dokument faktura tada mu trebaju na primer:
brojOtpremnice varchar(x),
brojPrijemnice varchar(x),
osnovicaZaPDV numeric(18,2),
PDV numeric(18,2)
........
Ako bi resavao ovo sa subtipskim tabelama imao bih problem
konacnosti broja tabela i indexa slozenosti projekta.

Nadam se da sam bio jasan, i da mi je jasno da je MS SQL relaciona a ne objektna baza.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: dinamicke kolone u sql server tabelama30.11.2009. u 08:43 - pre 175 meseci
Citat:
sparc: Nadam se da sam bio jasan, i da mi je jasno da je MS SQL relaciona a ne objektna baza.


Ovo nije bas 100% tacno, bar ne vise. XML omogucava drzanje serializovanih objekata u tabelama i njihovu obraadu i citanje preko xquery-a

Code:

CREATE TABLE dbo.MojaTabela
(
    ID int NOT NULL IDENTITY (1, 1),
    Tip varchar(128) NOT NULL,
    Podatak xml NOT NULL
)


Code:

insert into MojaTabela (Tip, Podatak) values ('Sijalica', '<data><sijalica><vati>60</vati><proizvodjac>Tesla</proizvodjac></sijalica></data>');
insert into MojaTabela (Tip, Podatak) values ('Sraf', '<data><sraf><duzina>10</duzina><promer>6</promer></sraf></data>');


Code:

select * from MojaTabela

ID  Tip       Podatak
1   Sijalica  <data><sijalica><vati>60</vati><proizvodjac>Tesla</proizvodjac></sijalica></data>
2   Sraf      <data><sraf><duzina>10</duzina><promer>6</promer></sraf></data>

select Tip, Podatak.query('/data/sraf') as Sraf 
from MojaTabela where Tip='Sraf' and Podatak.value('/data[1]/sraf[1]/duzina[1]', 'int') = 10

Tip     Sraf
Sraf    <sraf><duzina>10</duzina><promer>6</promer></sraf>


Na xml datatype mozes i da nalepis XSD semu koja ce kontrolisati unos podataka i brat bratu mozes SVE svoje objekte da drzis u jednoj tabeli. AKo xml ogranizujes tako da srodni objekti koji "nasledjuju" jedni druge imaju slicne podseme mozes i xquery da koristis za neke obrade na visem nivou granulacije.

postoje samo dva problema sa ovim, prvo T-SQL je ok za query-je ali ce aplikactivni nivo mnogo bolje da ti odradjuje generisanje i serijalizaciju objekata u xml, sto znaci malo vise posla na aplikaciji (sa druge strane ako koristis aplikativni nivo koji podrzava serijalizacije vec imas sebi odradjen posao konverzije podataka u objekte); drugo, nisam nikad koristi XQuery na nekom vecem nivou sa puno redova tako da ne znam koji je performance penalty za upotrebu istog, nesto mi se cini da value() primenjen na milion redova nije bas zanimljiv (al opet sa par hiljada redova sto sam ja koristio pokazao se odlicno).

[Ovu poruku je menjao mmix dana 30.11.2009. u 10:50 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

sparc
Sladjan Parc

Član broj: 65760
Poruke: 134
*.static.isp.telekom.rs.



Profil

icon Re: dinamicke kolone u sql server tabelama30.11.2009. u 09:17 - pre 175 meseci
mmix, Hvala na odgovoru, ovo resava pitanje objekata, ali sta ce se dogoditi ako se javi potreba
dodatavanja novog atributa objektu
<data><sijalica><vati>60</vati><proizvodjac>Tesla</proizvodjac><radniCas>1000</radniCas></sijalica></data>
svi delovi aplikacije padaju u vodu, jer (mozda meni u ovom trenutku nije sasvim jasno) su query za
manipulaciju podataka fiksni i zasnivaju se na vec poznatim svojstvima koji su existirali u odredjenom
vremenskom trenutku, bilo da su pisani kroz t-sql ili sqlxml.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: dinamicke kolone u sql server tabelama30.11.2009. u 09:37 - pre 175 meseci
Pa moras da odradis migraciju podataka u novu semu i za to se koristi SQL DML:

Code:

update MojaTabela
set Podatak.modify('insert <ImaZivu>false</ImaZivu> as last into (/data/sijalica)[1]') 
where Tip='Sijalica'

select * from MojaTabela where Tip='Sijalica'

ID   Tip       Podatak
1    Sijalica  <data><sijalica><vati>60</vati><proizvodjac>Tesla</proizvodjac><ImaZivu>false</ImaZivu></sijalica></data>



ako koristis XSD validaciju, prvo dodas node kao optional, onda posle "migracije" ubacis kao obavezan i baza je opet spremna, modify DML moze da dodaje atribute i nodove, da im menja vrednosti i cak i da brise kompletne delove xml stabla tako da je moguce preformatirati sve.


sto se tice ostatka tvoje poruke mislim da imas malo prevelika ocekivanja, nijedan computing deo danas nema kognitivne sposobnosti i ocekivati da se sistem sam prestroji za sve moguce promene koje tebi padnu na pamet je malo previse, da ne pominjem ocekivanje intelektualnog rezonovanja cemu zapravo sluzi dodato polje i kako se ono u T+1 trenutku uklapa sa stanjem sistema u trenutku T, mnogo smo mi daleko od toga a kad taj trenutak i dodje ja i ti necemo lupat glavu oko toga , moze samo skynet da polupa nase glave

Imas sisteme koji su manje ili vise zeznuti za prosirivanje ali kako god da okrenes ne gine ti dodatni posao niti mozes povecavati kompleksnost sistema bez da on postane kompleksniji.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

sparc
Sladjan Parc

Član broj: 65760
Poruke: 134
*.static.isp.telekom.rs.



Profil

icon Re: dinamicke kolone u sql server tabelama30.11.2009. u 10:16 - pre 175 meseci
mmix, Hala na odgovoru. Kraj diskusije.
 
Odgovor na temu

[es] :: MS SQL :: dinamicke kolone u sql server tabelama

[ Pregleda: 1623 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.