Group: microsoft.public.it.sql




Subject: .. ancora su indicizzazione tabelle!
From: Sy
Date: 5/2/2007 11:12:37 AM
Ciao amici, mi serve un consiglio. Nel progetto che sto sviluppando, ho una tabella principale con n tabelle ad essa collegate. Posto sotto la princiapale e **alcune** delle subordinate. Deciso che le prestazioni in fase di inserimento possono essere tralasciate, a discapito di quelle in fase di lettura ecco come indicizzerei io il db ... Accetto tutti i consigli possibili !!!! Grazie mille Simone --////////////////////////////////////////////////////////////////////////////////////// -- PRINCIPALE --////////////////////////////////////////////////////////////////////////////////////// CREATE TABLE [dbo].[RisorseCasaImmobile]( [IDImmobile] [int] IDENTITY(1,1) NOT NULL, [IDAgenzia] [int] NULL, [RiferimentoImmobile] [varchar](10) COLLATE Latin1_General_CI_AS NULL, [IDProvincia] [int] NULL, [IDTipologia] [int] NULL, [IDCategoria] [int] NULL, [IDContratto] [int] NULL, [IDComune] [int] NULL, [Zona] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [Indirizzo] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [Mq] [int] NULL, [NumLocali] [int] NULL, [NumServizi] [int] NULL, [Prezzo] [money] NULL, [DescrizioneIta] [ntext] COLLATE Latin1_General_CI_AS NULL, [DescrizioneEng] [ntext] COLLATE Latin1_General_CI_AS NULL, [DescrizioneTed] [ntext] COLLATE Latin1_General_CI_AS NULL, [Foto1] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [Foto2] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [Foto3] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [Foto4] [varchar](50) COLLATE Latin1_General_CI_AS NULL, CONSTRAINT [PK_RisorseCasaImmobile] PRIMARY KEY CLUSTERED ( [IDImmobile] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[RisorseCasaImmobile] WITH CHECK ADD CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaComuni] FOREIGN KEY([IDComune]) REFERENCES [dbo].[RisorseCasaComuni] ([IDComune]) GO ALTER TABLE [dbo].[RisorseCasaImmobile] CHECK CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaComuni] GO ALTER TABLE [dbo].[RisorseCasaImmobile] WITH CHECK ADD CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaContratto] FOREIGN KEY([IDContratto]) REFERENCES [dbo].[RisorseCasaContratto] ([IDContratto]) GO ALTER TABLE [dbo].[RisorseCasaImmobile] CHECK CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaContratto] GO ALTER TABLE [dbo].[RisorseCasaImmobile] WITH CHECK ADD CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaProvince] FOREIGN KEY([IDProvincia]) REFERENCES [dbo].[RisorseCasaProvince] ([IDProvincia]) GO ALTER TABLE [dbo].[RisorseCasaImmobile] CHECK CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaProvince] GO ALTER TABLE [dbo].[RisorseCasaImmobile] WITH CHECK ADD CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaTipologia] FOREIGN KEY([IDTipologia]) REFERENCES [dbo].[RisorseCasaTipologia] ([IDTipologia]) GO ALTER TABLE [dbo].[RisorseCasaImmobile] CHECK CONSTRAINT [FK_RisorseCasaImmobile_RisorseCasaTipologia] --////////////////////////////////////////////////////////////////////////////////////// -- SUBORDINATA 1 --////////////////////////////////////////////////////////////////////////////////////// CREATE TABLE [dbo].[RisorseCasaTipologia]( [IDTipologia] [int] IDENTITY(1,1) NOT NULL, [Tipologia] [varchar](50) COLLATE Latin1_General_CI_AS NULL, CONSTRAINT [PK_RisorseCasaTipologia] PRIMARY KEY CLUSTERED ( [IDTipologia] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] --////////////////////////////////////////////////////////////////////////////////////// -- SUBORDINATA 2 --////////////////////////////////////////////////////////////////////////////////////// CREATE TABLE [dbo].[RisorseCasaContratto]( [IDContratto] [int] IDENTITY(1,1) NOT NULL, [Contratto] [varchar](50) COLLATE Latin1_General_CI_AS NULL, CONSTRAINT [PK_RisorseCasaContratto] PRIMARY KEY CLUSTERED ( [IDContratto] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]

Subject: .. ancora su indicizzazione tabelle!
From: Sy
Date: 5/2/2007 11:52:36 AM
Ciao Marcello, le tue puntualizzazioni inerenti i campi descrizione e foto + NULL sono perfette e come tali provvederò alla modifica ;) Piuttosto mi rimane il dubbio di come strutturare nella tabella Immobili il concetto: un immobile appartiene ad un comune il quale fa parte di una provincia che a sua volta è una regione. Al momento la relazione comune provincia regione le ho strutturate così : CREATE TABLE [dbo].[RisorseCasaRegioni]( [IDRegione] [int] IDENTITY(1,1) NOT NULL, [Regione] [varchar](50) COLLATE Latin1_General_CI_AS NULL, CONSTRAINT [PK_RisorseCasaRegioni] PRIMARY KEY CLUSTERED ( [IDRegione] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[RisorseCasaProvince]( [IDProvincia] [int] IDENTITY(1,1) NOT NULL, [Provincia] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [IDRegione] [int] NULL, [Sigla] [char](2) COLLATE Latin1_General_CI_AS NULL, CONSTRAINT [PK_RisorseCasaProvince] PRIMARY KEY CLUSTERED ( [IDProvincia] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[RisorseCasaProvince] WITH CHECK ADD CONSTRAINT [FK_RisorseCasaProvince_RisorseCasaRegioni] FOREIGN KEY([IDRegione]) REFERENCES [dbo].[RisorseCasaRegioni] ([IDRegione]) GO ALTER TABLE [dbo].[RisorseCasaProvince] CHECK CONSTRAINT [FK_RisorseCasaProvince_RisorseCasaRegioni] CREATE TABLE [dbo].[RisorseCasaComuni]( [IDComune] [int] IDENTITY(1,1) NOT NULL, [Comune] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [IDProvincia] [int] NULL, CONSTRAINT [PK_RisorseCasaComuni] PRIMARY KEY CLUSTERED ( [IDComune] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[RisorseCasaComuni] WITH CHECK ADD CONSTRAINT [FK_RisorseCasaComuni_RisorseCasaProvince] FOREIGN KEY([IDProvincia]) REFERENCES [dbo].[RisorseCasaProvince] ([IDProvincia]) GO ALTER TABLE [dbo].[RisorseCasaComuni] CHECK CONSTRAINT [FK_RisorseCasaComuni_RisorseCasaProvince] certo è che la ricerca avviene in molteplici modi esempio: tutti gli immobili di un comune, oppure di una provincia e a loro volta con fitro sul prezzo, piuttosto che sulla tipologia... a quasto punto non conviene inserire nella tabella Immobili i riferimenti alla PK delle tabelle region, provincia, comune oppure mettere conviene metterle in ogni volta????? Grazie mille Simone "Marcello" <marcello.poletti@epomops.it> ha scritto nel messaggio news:59r42qF2lqtqgU3@mid.individual.net... > Sy ha scritto: >> Ciao amici, mi serve un consiglio. > > Ciao Simone, > >> Nel progetto che sto sviluppando, ho una tabella principale con n tabelle >> ad essa collegate. >> Posto sotto la princiapale e **alcune** delle subordinate. > > Ok. > >> Deciso che le prestazioni in fase di inserimento possono essere >> tralasciate, >> a discapito di quelle in fase di lettura ecco come indicizzerei io il db >> ... >> Accetto tutti i consigli possibili !!!! > > Vediamo :-D > >> CREATE TABLE [dbo].[RisorseCasaImmobile]( >> [IDImmobile] [int] IDENTITY(1,1) NOT NULL, >> [IDAgenzia] [int] NULL, >> [RiferimentoImmobile] [varchar](10) COLLATE Latin1_General_CI_AS NULL, >> [IDProvincia] [int] NULL, >> [IDTipologia] [int] NULL, >> [IDCategoria] [int] NULL, >> [IDContratto] [int] NULL, >> [IDComune] [int] NULL, > > ...mmm... ID_Comune e ID_Provincia sulla stessa tabella? Ha un senso o > soono forzati dall'esterno ad essere coerenti? Se si, molto meglio: > > CREATE TABLE [dbo].[RisorseCasaImmobile]( > ... > [IDComune] [int] NULL, > > CREATE TABLE [dbo].[Comuni]( > [IDComune] [int] NULL, > [ID_Provincia] ... [!!!!!] > >> [DescrizioneIta] [ntext] COLLATE Latin1_General_CI_AS NULL, >> [DescrizioneEng] [ntext] COLLATE Latin1_General_CI_AS NULL, >> [DescrizioneTed] [ntext] COLLATE Latin1_General_CI_AS NULL, > > Occhio alla scalabilità. Un'estensione al francese richiede modifiche > strutturali! Meglio tabelle derivate. > >> [Foto1] [varchar](50) COLLATE Latin1_General_CI_AS NULL, >> [Foto2] [varchar](50) COLLATE Latin1_General_CI_AS NULL, >> [Foto3] [varchar](50) COLLATE Latin1_General_CI_AS NULL, >> [Foto4] [varchar](50) COLLATE Latin1_General_CI_AS NULL, > > Come sopra, e la quinta foto? > Inoltre, complessivamente, è tutto nullable, male! :-D > >> CONSTRAINT [PK_RisorseCasaImmobile] PRIMARY KEY CLUSTERED >> ( >> [IDImmobile] ASC >> )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] >> ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] > > Ok, pk e cluster sul surrogato. > >> ALTER TABLE [dbo].[RisorseCasaImmobile] WITH CHECK ADD CONSTRAINT >> [FK_RisorseCasaImmobile_RisorseCasaComuni] FOREIGN KEY([IDComune]) >> REFERENCES [dbo].[RisorseCasaComuni] ([IDComune]) >> [CUT] > > Ok, tutte le relazioni del caso. > >> CREATE TABLE [dbo].[RisorseCasaTipologia]( >> [IDTipologia] [int] IDENTITY(1,1) NOT NULL, >> [Tipologia] [varchar](50) COLLATE Latin1_General_CI_AS NULL, >> CONSTRAINT [PK_RisorseCasaTipologia] PRIMARY KEY CLUSTERED >> ( >> [IDTipologia] ASC >> )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] >> ) ON [PRIMARY] > > Non ci va un vincolo univoco su Tipologia? Possono esistere 2 tipologie > identiche? > >> --//////////////////////////////////////////////////////////////////////////////// ////// >> -- SUBORDINATA 2 >> --//////////////////////////////////////////////////////////////////////////////// ////// >> CREATE TABLE [dbo].[RisorseCasaContratto]( >> [IDContratto] [int] IDENTITY(1,1) NOT NULL, >> [Contratto] [varchar](50) COLLATE Latin1_General_CI_AS NULL, >> CONSTRAINT [PK_RisorseCasaContratto] PRIMARY KEY CLUSTERED >> ( >> [IDContratto] ASC >> )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] >> ) ON [PRIMARY] > > Come sopra relativamente a Contratto. > ...mmm... e che pareri vorresti sull'indicizzazione? Non ci sono indici a > parte i cluster sui surrogati che naturalmente vanno benone :-D > > marc. > > -- > Marcello Poletti > Dingo&Epomops > Microsoft MVP - SQL Server > http://www.dingoepomops.it > http://blogs.dotnethell.it/epomops/

Subject: .. ancora su indicizzazione tabelle!
From: Sy
Date: 5/3/2007 9:28:05 AM
>"Marcello" <marcello.poletti@epomops.it> ha scritto nel messaggio >news:59ra0bF2lqtqgU5@mid.individual.net... >[CUT] Ciao Marcello, apprezzo infinitamente la lezione che mi hai impartito, e sono immediatamente corso a correggere le tabelle così come hai detto tu. Quindi lasciando da parte il nameconvention per il momento questo è il risultato della tabella es province: CREATE TABLE [dbo].[RisorseCasaProvince]( [IDProvincia] [int] IDENTITY(1,1) NOT NULL, [Provincia] [varchar](50) COLLATE Latin1_General_CI_AS ** NOT NULL **, [IDRegione] [int] ** NOT NULL **, [Sigla] [char](2) COLLATE Latin1_General_CI_AS NULL, CONSTRAINT [PK_RisorseCasaProvince] ** PRIMARY KEY CLUSTERED ** ( [IDProvincia] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] ALTER TABLE [dbo].[RisorseCasaProvince] WITH CHECK ADD CONSTRAINT [FK_RisorseCasaProvince_RisorseCasaRegioni] FOREIGN KEY([IDRegione]) REFERENCES [dbo].[RisorseCasaRegioni] ([IDRegione]) ALTER TABLE [dbo].[RisorseCasaProvince] CHECK CONSTRAINT [FK_RisorseCasaProvince_RisorseCasaRegioni] ** CREATE UNIQUE NONCLUSTERED INDEX [IX_RisorseCasaProvince] ON [dbo].[RisorseCasaProvince] ** ( [Provincia] ASC )WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY] ** ALTER TABLE [dbo].[RisorseCasaProvince] ADD CONSTRAINT [PK_RisorseCasaProvince] PRIMARY KEY **CLUSTERED ( [IDProvincia] ASC )WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY] Confermi???? Se questo è ok mi volevo soffermate sulla tabellla immobili, mi sorge una domanda. Se per motivi di normalizzazione è sempre preferibile non aggiungere le informazioni della regione, provincia e comune cosa metto delle tre??? Penso che sia indispensabile il riferimento con il comune dal moomento che dato questo, posso risalire alla provincia e alla regione ?? Giusto? Grazie mille Simone