Risultati da 1 a 10 di 23
-
25-11-2010, 15:38 #1
- Data Registrazione
- Oct 2010
- Messaggi
- 18
Integrità referenziale per la tabella post
Buongiorno a tutti
dovrei eliminare circa 320.000 righe su un totale >3.000.000 dalla tabella post.
Si tratta del postumo di una importazione da phpbb effettuata alcuni anni fa.
Come posso fare per eliminare queste righe rispettando l'integrità referenziale dell'intero database?
Grazie
J.
-
25-11-2010, 18:29 #2
- Data Registrazione
- Aug 2007
- Messaggi
- 20
Bella domanda!!
Bisognerebbe sapere quante e quali altre tabelle hanno campi in relazione con questi della tabella post
1. postid int 10 no Chiave primaria unsigned auto_increment
2. threadid int 10 no unsigned 0
3. parentid int 10 no unsigned 0
4. username varchar 100 no utf8_general_ci
5. userid int 10 no unsigned 0
6. title varchar 250 no utf8_general_ci
7. dateline int 10 no unsigned 0
8. pagetext mediumtext sì utf8_general_ci
9. allowsmilie smallint 6 no 0
10. showsignature smallint 6 no 0
11. ipaddress varchar 15 no utf8_general_ci
12. iconid smallint 5 no unsigned 0
13. visible smallint 6 no 0
14. attach smallint 5 no unsigned 0
15. infraction smallint 5 no unsigned 0
16. reportthreadid int 10 no unsigned 0
17. ame_flag tinyint 4 no 0
18. htmlstate enum('off','on','on_nl2br') no on_nl2br utf8_general_ci
19. amer_parsed tinyint 1 no 0
-
25-11-2010, 19:06 #3
- Data Registrazione
- Oct 2010
- Messaggi
- 18
-
25-11-2010, 22:23 #4
- Data Registrazione
- Aug 2007
- Messaggi
- 20
Avere lo schema relazionale del db del vbulletin significherebbe poterselo girare e trasformare a proprio piacimento.
Problemi di normalizzazione non credo e si nota a vista d'occhio che non ci sono ridondanze di dati e che le transitività fino alla terza forma funzionano a meraviglia.
é da almeno 3 settimane che cerco uno schema del db per capire anche i probemi che ha il mio vbulletin. Problemi creati non da vbulletin ma da un'upgrade un pò sfortunato.
Leggendo i dati nella tabella post ho l'impressione che sia stand alone e non si relazioni con altre. La mia è solo un'impressione non basata su verifica, ma penso che eliminando i tuoi post in eccedenza e ricostruendo gli indici non dovrebbe causare danni.
Ma aspetta che ti risponda qualche altro più esperto e conoscitore del VB di me
-
26-11-2010, 09:27 #5
- Data Registrazione
- Oct 2010
- Messaggi
- 18
Nel file mysql-schema.php lo schema c'è, e anche le relazioni (quelle che si ricavano dalle PK-FK). Quindi non credo che ci siano segreti. Bisognerebbe però leggerlo e studiarlo riga per riga. Non c'è uno schema relazionale formalizzato.
Io invece proprio leggendo la tabella post credo che ci sia uno schema relazionale piuttosto rigido, ma controllato solo dal codice, e che non ci sia, almeno per com'è il database nella sua forma originale, nessuna possibilità di una cascade deletion automatica.
Credo che eliminando i post si creerebbero orfani, ma è proprio questo che mi interessava sapere.
-
26-11-2010, 13:12 #6
- Data Registrazione
- Aug 2007
- Messaggi
- 20
La tua domanda è chiara.
Nel file schema ci sono le strutture delle tables ed io la vedo molto complicata estrarne uno schema concettuale per capire l'integrità referenziale.
Ragionandoci un pò su, anche a livello semplicistico, le foreign key chiave esterna servono a mettere in relazione tabelle. E fin qui ci siamo come da definizione. Ma guardando i campi (attributi) della table post se dovessimo cancellare un record (tupla) quali campi di altre tabelle resterebbero orfane?
KEY userid (userid, parentid),
KEY threadid (threadid, userid),
KEY threadid_visible_dateline (threadid, visible, dateline, userid, postid),
KEY dateline (dateline),
KEY ipaddress (ipaddress)
Quale altra tabella sarebbe orfana di queste FK della table POST?
Correggimi se sbaglio! Serve a ragionarci su.
-
26-11-2010, 15:04 #7
- Data Registrazione
- Oct 2010
- Messaggi
- 18
Sì, estrarre uno 'schema concettuale' è parecchio difficile. Io ci ho provato con alcuni tools di RE (incluso MySQL Manager) ma senza successo. Ho anche chiesto nei forum istituzionali, nessuno mi ha saputo dire.
Ad ogni modo, a me risulta:
PRIMARY KEY (postid)
KEY userid (userid)
KEY threadid (threadid, userid)
FULLTEXT KEY title (title, pagetext)
Questo letto da mysql-schema.php, mentre leggendo la tabella ho anche un
KEY importpost_index (importpostid)
Quest'ultimo probabilmente ha a che fare con l'importazione da phpbb, ma la persona che se ne occupava non c'è più e quindi non ho dettagli.
Essendo postid una chiave primaria, ci sono naturalmente diverse tabelle che la usano come FK:
attachment
discussion
editlog
infraction
moderatorlog
podcastitem
postedhistory
postindex
postlog
postparsed
posthash
reputation
ecc. ecc.
Questo significa che per ogni tupla di post dovrei andare a cancellare anche i record che contengono postid come FK o che la relazionano. E per ogni record di ogni tabella che ha una FK (postid) rifare la stessa operazione e ritroso sulle equivalenti rispettive PK.
O sbaglio?
Se non sbaglio, cancellare le righe da post è un gran mal di testa.
-
26-11-2010, 16:15 #8
- Data Registrazione
- Aug 2007
- Messaggi
- 20
A quanto pare dipende dalla versione del vb e sopratutto dai plugins istallati.
Non resta che capire cosa fa la routine che cancella un post e forse non basta.
E' vero che ricavare a ritroso uno schema concettuale che utilizza 200-300 tabelle è un'impresa mostruosa, per questo dicevo che conoscerlo ti permetterebbe di rivoltare i vb come ti pare e piace, anche pechè vb non è database didattico in quanto incorpora molte cose che uno pensa siano facilmente e chiaramente visibili nei sorgenti
Chissà se Knut, Morrison, Pratt lo sapevano e sopratutto se ne hanno mai parlato con Codd
PS: queste due tabelle che usano il postid come chiave esterna incutono timore
postparsed
posthash
Hai provato a leggerti il tools.php che sta nella cartella No_upload? magari ti da qualche indicazione nel caso riparasse indici di tabelle
-
26-11-2010, 16:24 #9
- Data Registrazione
- Oct 2010
- Messaggi
- 18
Ciao. Ho provato a cercare in rete: altri utenti prima di me hanno avuto lo stesso problema, ma non ho trovato soluzioni.
Ho provato anche, come intelligentemente dici tu, di capire cosa fa editpost.php, che alla fine è il codice che cancella fisicamente il post, ma non ci ho capito nulla, è molto complesso perchè gestisce anche i permessi, ecc. E questo conferma che una semplice query DELETE non può funzionare. Le mie conocenze di php sono pressochè a zero.
Però ho visto che nel ACP c'è una opzione per cancellare tutti i post di un certo utente. Allora pensavo di creare un utente fittizio, modificare con SQL userid da tutti i record duplicati (che sono noti) della tabella post mettendoci l'id dell'utente fittizio, e poi far cancellare da ACP i post dell'utente fittizio.
Pensi che possa funzionare? Dopotutto all'integrità riferenziale ci dovrebbe pensare ACP
-
26-11-2010, 17:20 #10
- Data Registrazione
- Aug 2007
- Messaggi
- 20
E come mi ha detto un grande di questo forum fatti prima un backup della tabella post e magari, visto che conosci ormai tutte le fk anche delle tabelle relative.
Mi piacerebbe aiutarti, ma non sono la persona più adatta, sono un newbie del vbulletin e mi caricherei di troppe responsabilità.
Sicuramente ogni CALL() dell'acp pensa all'integrità, sarebbe assurdo se non lo facesse, ad ogni reindex salterebbe il DB.
In pratica stai dicendo "Se cambio id a tutti i post raddoppiati associandoli a quello dell'iduser fittizio, al massimo se mi va male uccido un fittizio"
Non lo so!! Mi sembra troppo immediata come soluzione.
Ma sei sicuro che nell'acp non ci sia un remove di tutti i post raddoppiati? A me sembra di averlo visto da qualche parte.
Discussioni Simili
-
Tabella post corrotta, riparazione impossibile?
Di maryan nel forum Agorà di vBulletinRisposte: 4Ultimo Messaggio: 25-10-2007, 16:12 -
vBulletin 3.6.x tabella in un post
Di ik7jwy nel forum VBulletin 3Risposte: 6Ultimo Messaggio: 13-09-2007, 10:50 -
vBulletin 3.6.x Tabella Database
Di White nel forum VBulletin 3Risposte: 3Ultimo Messaggio: 18-11-2006, 02:00 -
vBulletin 3.6.x Errore Tabella
Di White nel forum VBulletin 3Risposte: 2Ultimo Messaggio: 20-10-2006, 22:12 -
Tabella da 1,6 Giga
Di Sergio nel forum Agorà di vBulletinRisposte: 16Ultimo Messaggio: 11-10-2006, 00:42
Segnalibri