Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  kiiresti abi vaja: MSSQLi vigase andmebaasi tuksis integriteedi parandamine märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
tanzanite
HV kasutaja
tanzanite

liitunud: 13.05.2006




sõnum 24.01.2008 21:35:48 kiiresti abi vaja: MSSQLi vigase andmebaasi tuksis integriteedi parandamine vasta tsitaadiga

Proovin oma tavat88 k6rvalt yht h2dalist aidata.

Taust (yks arengupeetusega pervert tegi kunagi yhe teatava ettev6tte jaoks v2ga missioonikriitilise rakenduse kus "andmebaas" on selline [kirjeldan konkreetse probleemse tabeli]):
* tabel kujul (id, a_id, b_id)
* v6tmev2ljad puuduvad (pole yhtegi PK, FK, PFK-d. Ideepoolest on id=PK ja a_id,b_id=FK. tegelikult peaks olema ilma id'ta ja a_id ning b_id peaks olema PFK'd)
* k6ik v2ljad v6ivad olla nullid

(btw. ylej22nud tabelid on m2rksa hullemad [see tabel siin on vist yks elementaarsemaid tabeleid mida koostada saab])

Probleem:
Selles tabelis on paljud read topelt (h2dap2rast v6iks ka k2sitsi neid noppida - kui see v6imalik oleks kuidagi). Kuidas vabaneda topeltkirjetest ?

On kellelgi ideid?

edit: ega vist muud yle ei j22 kui teha mingi skript mis tabelit sisse loeb ja siis uue filtreeritud tabeli v2lja kirjutab - eh? :/

(PS. palun, algajad andmebaasi nikerdajad - 2rge tehke MITTE YHTEGI tabelit/baasi enne kui te t2pselt teate mida te teete. see EI OLE koht kus katse-eksituse meetodil oskusi omandada ! thumbs_up.gif )
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiinanina
HV kasutaja

liitunud: 27.02.2003




sõnum 24.01.2008 23:42:39 vasta tsitaadiga

Kui id väljas on toesti null väärtusi siis
alustad sellest, et lisad tabelile yhe välja tyypi int identity(1,1) not null .
Ja siis void juba sama tabeli peale kirjutada scripti


delete t
from table t
where
exists

(select * from table y where t.väil1 = y.väli1
and t.väli2 = y.väli2 .....
and t.väliidentity > y.väliidentity )

Kui on aega ja voimalust andmebaas offline votta siis void muidugi igasugu variante teha.
select distinct * into teinetable from table
ja pärast drop ning rename on muidugi variandid.


Tabelis olev unikaalne PK voti ei tee kunagi halba.
Isegi kui algul paistab ta mittevajalik olevat.
Praktika näitab, et ta tuleb juurde teha kui algul tegemata jäi.
Ja mingist hetkest alates, paned selle automaatselt tabeli esimeseks väljaks motlemata, kas seda tegelikult ikka vaja on.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
tiitsut
HV vaatleja

liitunud: 27.06.2007




sõnum 24.01.2008 23:57:32 vasta tsitaadiga

Ma lahendaks asja umbes nii (MSSQL'i süntaksit täpselt ei tea)


create table backup_tabel as (select distinct * from tabel);
delete from tabel;
insert into tabel as (select * from backup_tabel);
commit;


tabeli droppamise ja struktuuri muutmisega võib probleeme tekkida ka indexitega, triggeritega, viewdega jne.. (kui neid on muidugi)
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
tanzanite
HV kasutaja
tanzanite

liitunud: 13.05.2006




sõnum 25.01.2008 13:11:16 vasta tsitaadiga

wiinanina, id on unikaalne võti aga pole sellisena defineeritud (ja ei saa ka ümber defineerida kuna topeltkirjed sees). uue lisavälja lisamine tundub halb mõte olevat.
tiitsut, hm... see väärib ka uurimist (indexitega, triggeritega, viewid puuduvad [paljudes tabelites on siiski primary key olemas]).
tagasi üles
vaata kasutaja infot saada privaatsõnum
connor
HV kasutaja

liitunud: 19.02.2003




sõnum 25.01.2008 14:19:28 vasta tsitaadiga

wiinanina lahenduse puhul saab uue lisavälja ju pärast fiximist uuesti maha võtta ning panna vanale id'le siis unikaalsuse klausel peale.

Aga üldiselt on ainult kaks lahendust tõesti - kas lisaväli korduvate ridade eristamiseks või distinct'iga uude tabelisse ajutiselt ümber tõsta.
Kommentaarid: 31 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 28
tagasi üles
vaata kasutaja infot saada privaatsõnum
tanzanite
HV kasutaja
tanzanite

liitunud: 13.05.2006




sõnum 25.01.2008 16:05:50 vasta tsitaadiga

connor, lisav2li: ma ei tea kuidas rakendus sellesse suhtub ja teatavate RDP probleemide t6ttu mis mul sealse serveriga on võin ma ühenduse suvalisel hetkel permanentselt kaotada (mitmeks päevaks) - see värgendus ei tohiks seejuures ebastabiilsesse seisu jääda. Ehk parem karta kui kahetseda. :/
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  kiiresti abi vaja: MSSQLi vigase andmebaasi tuksis integriteedi parandamine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.