APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE...

31
1 APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del DB https://dl.dropboxusercontent.com/u/15491020/SitoWeb/AdventureWorksLT_SIA.bak

Transcript of APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE...

Page 1: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

1

APPUNTILEZIONE22OTTOBRE2015

DiagrammarelazionaledelDBhttps://dl.dropboxusercontent.com/u/15491020/SitoWeb/AdventureWorksLT_SIA.bak

Page 2: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

2

Pergenerareildiagrammarelazionale:

quindiaggiungereletabelleadeccezionediBuildVersionederrorLog

Page 3: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

3

Siconsideranoletrerelazioni(alcuniattributisonoomessi,inomisonoabbreviati)

ProductCategoryPC(PC_ID,PPC_ID:PC,Name)

ProductP(P_ID,Name,PC_ID:PC)

SalesOrderDetailSOD(SO_ID,SOD_ID,P_ID:P,Qty)

(siccomenonsiconsideraalmomentolatabellaSalesOrderHeader,nonvieneindicatalaforeignkeySO_ID:SOH)

DataProfiling

1. NameèAKinPC PC(PC_ID,PPC_ID:PC,Name) AK:Name

2. NameèAKinP P(P_ID,Name,PC_ID:PC) AK:Name

3. SO_ID,P_IDèAKinSOD,ovverounprodottoèpresenteneldettagliodiunordinealMassimounavolta! SOD(SO_ID,SOD_ID,P_ID:P,Qty) AK:SO_ID,P_ID

Page 4: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

4

Sivuoleanalizzareneldettagliolarelazione

ProductCategoryPC(PC_ID,PPC_ID:PC,Name)

Chepresentaunaforeignkeyriferitaasestessa,usataperclassificarelecategorie:laPPC(ParentProductCategory)diunacategoriaèlacategoriapiùgenerale,adesempio

Corrispondeallaseguentegerarchiadiclassificazionedellecategorie

Consideriamoancheleistanzedellealtreduetabelle(nellatabellaPCsonostateinseritealtrecategorie)PC P SOD

Page 5: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

5

ReverseEngineeringinER

InER,unaforeignkeyriferitaasestessa

PC(PC_ID,PPC_ID:PC,Name)

AK:Name

Corrispondeadunanellooassociazionericorsiva,ovveroassociazionetraun’entitàesestessa:

Il(nomedel)ruolo(FIGLIA,PADREnell’esempio)èimportanteperdistinguereildifferenteruolodell’entitànell’associazione.

Page 6: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

6

Datoloschemarelazionaledelnostroesempioridotto

PC(PC_ID,PPC_ID:PC,Name) AK:Name P(P_ID,Name,PC_ID:PC) AK:Name SOD(SO_ID,SOD_ID,P_ID:P,Qty) AK:SO_ID,P_ID

L’ERcompletoèilseguente:

Page 7: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

7

PROGETTAZIONEDELDataMart

Requisiti:DimensioniD={SO_ID,PRODOTTO}

(lamisuraèlaquantitàQTY)

Note:

1) SO_IDèdegenere,nonavendonelloschemaridottoaltreinformazionisull’ordineaparteilsuoidentificatore2) DelprodottononinteressailsuoP_ID(potato)esiconsiderailName(cheèchiave):perchiarezzasirinominainPRODOTTO3) DellacategorianoninteressailsuoPC_ID(potato)esiconsiderailName(cheèchiave):perchiarezzasirinominainCATEGORIA

Aspettoprincipale:

l’anello/associazionericorsivaPPCdiCATEGORIA(entitàPC)corrispondeadunagerarchiaricorsiva:

Nonèstatodiscussoalezione(verràfattolaprossimavolta)

maèfacileverificarechequestoschemaèTRANSAZIONALE!!

Page 8: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

8

ComeottenereilpatternCATEGORIA,ovverounreportconindicatelecategorieconlerelativequantitàvendute

CATEGORIA QTY

BICI 140

PEDALE 50

… …

Possibilisoluzioni:

1) Strumentiad-hocdelsistemaOLAP2) InSQL

Questesoluzioniverrannovalutatenelleprossimelezioni.

Page 9: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

9

SecondaParte

ConsideriamolatabellaSalesOrderDetailDiscount(SODD),�per�la�quale�non�è�stata�dichiarata�nello�schema�la�chiave�e�nessuna�foreign�key:

InfasediDataProfilingèfondamentaledeterminarelechiavieleforeignkey(associazioniconaltretabelle)

Abbreviamoinomi:SODD(SO_ID,SOD_ID,UPD,Discount)

IntuitivamenteSODDèunsottoinsiemediSOD....Inrelazionaleunsottoinsiemesispecificaconunaforeignkeycheèanchechiave,ricordatel'esempiodelCHECK_INoquelloclassicoLAUREANDOcomesottoinsiemediSTUDENTE:

STUDENTE(MATR,ETA)LAUREANDO(MATR:STUDENTE,TitoloTesi)

VerificolachiaveSO_ID,SOD_IDSELECT*FROMSODDwhereSO_IDisnullORSOD_IDisnull

SELECTSO_ID,SOD_IDFROMSSODgroupbySO_ID,SOD_IDhavingcount(*)>1

Page 10: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

10

Entrambevuotequindièchiave:SODD�(SO_ID,�SOD_ID,���UPD,�Discount�)

PerverificarelaforeignkeyinSODD�riferita�a�SOD,��

cioè�FK:�SO_ID,�SOD_ID��REFERENCES�SOD�

abbreviate�comeSODD�(SO_ID,�SOD_ID�:�SOD,���UPD,�Discount�)

Devo�verificare�che�in�SODD�non�ci�siano�coppie�di�SO_ID,�SOD_ID��non�associate�a�coppie�di�SO_ID,�SOD_ID��in�SODOvverocheilseguenteleftjoinrestituiscal’insiemevuoto

SELECT*FROMSODDLEFTJOINSODONSOD.SO_ID=SODD.SO_IDANDSOD.SOD_ID=SODD.SOD_IDwhereSOD.SOD_IDisnull

Verifichiamoanchecheilviceversanonèvero

SELECT*FROMSODLEFTJOINSODDONSOD.SO_ID=SODD.SO_IDANDSOD.SOD_ID=SODD.SOD_IDwhereSODD.SOD_IDisnull

restituisce449righe:sonoquellesenzaDISCOUNT

Page 11: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

11

In�definitiva�

SODD�(SO_ID,�SOD_ID�:�SOD,���UPD,�Discount�)

Nel�database�reale�dove�devo�aggiungere�la�Key�e�la�FK�individuate?�

Si�dovrebbero����nel�DBO�riconciliato,�che�pu��essere�un�nuovo�database�(architetture�a�tre�livelli)�oppure�quello�dato�modificato.�

Nella�tesina�la�Key�e�la�FK��vanno�riportate�SEMPLICEMENTE�nella�DOCUMENTAZIONE,�cioè�nel�report�da�consegnare�scriveremo�

SODD�(SO_ID,�SOD_ID�:�SOD,���UPD,�Discount�)

e�quindi�tramite�reverse�engineering�in�ER�come�SUBSET����

La�progettazione�concettuale�verrà�fatta�nella�prossima�lezione.�

Page 12: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

12

TERZAPARTE(svoltail29Ottobre)

Consideriamoletrerelazioni

CUSTOMER(CustomerID,…

CUSTOMERADDRESS(CustomerID:CUSTOMER,AddressID:ADDRESS,AddressType)

ADDRESS(AddressID,…)

LoschemaERcorrispondenteèilseguente

DalDataProfilingrisultacheAddressIDèchiavediCUSTOMERADDRESS(quindiCustomerID,AddressIDsuperchiave),cioè

CUSTOMERADDRESS(CustomerID:CUSTOMER,AddressID:ADDRESS,AddressType)

LoschemaERcorrispondentecambiaquindinelseguenteschema

DalDataProfilingrisultaanchecheCustomerID,AddressTypeèchiavediCUSTOMERADDRESS,cioè

CUSTOMERADDRESS(CustomerID:CUSTOMER,AddressID:ADDRESS,AddressType) AK:CustomerID,AddressType

ADDRESSCUSTOMER (0,N)(0,N)

CUSTOMERADDRESS

AddressType

ADDRESS

CUSTOMER (1,1)(0,N) CUSTOMERADDRESS

AddressType

Page 13: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

13

QuestachiavealternativanelloschemaERcorrispondeadaggiungereunulterioreidentificatoreaCUSTOMERADDRESS

Questanuovachiavealternativa,questonuovoidentificatore,assiemealfattochecisonosoloduevaloridistintidiAddressType(MainOfficeeShipping)implicacheunCUSTOMERnonpossaaverepiùdidueistanzeinCUSTOMERADDRESS,ovverolacardinalitàNpuòesserecambiatain2.

Siccome ci sono solo al massimo due indirizzi per un CUSTOMER, possiamo individuarli e riportarli come colonne di una vista/tabella, cioèpossiamodefinire

VA(CustomerID,ShippingAddress,MainOfficeAddress)

Sinoticheintalevista/tabellaCustomerIDnonèmainulloenonsiripete,quindièchiave,mentreShippingAddress,MainOfficeAddresssonoADDRESSequindiriferititramiteforeignkeyadADDRESS;siccomel’entitàconchiaveCustomerIDèCUSTOMER,possiamoaggiungerequestedueassociazioniall’entitàCUSTOMER,ottenendo

ADDRESS

CUSTOMER (1,1)(0,N) CUSTOMERADDRESS

AddressType

ADDRESSCUSTOMER (0,1)(0,1)

MainOfficeAddress

(0,1)(0,1)

ShippingAddress

Page 14: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

14

Consideriamoora

ProductModelProductDescription(ProductModelID:ProductModel,ProductDescriptionID:ProductDescription,Culture)

Usandonomiitalianieusandoperlachiaveel’entitàlostessonomeavremo

PRODOTTO(PRODOTTO,..

DESCRIZIONE(DESCRIZIONE,…

PRODOTTO_DESCRIZIONE(PRODOTTO:PRODOTTO,DESCRIZIONE:DESCRIZIONE,LINGUA)

PRODOTTO_DESCRIZIONEhaunachiavecompostadatreelementiquindièun’associazioneternaria

EssendoLINGUAsolounattributoenonunaforeignkeyriferitaadunaistanza,megliorappresentarlocome

DESCRIZIONEPRODOTTO (0,N)(0,N)

PRODOTTO_DESCRIZIONE

LINGUA

(0,N)

PRODOTTO_DESCRIZIONE

DESCRIZIONE B(0,N) (1,1) PRODOTTOA (0,N)(1,1)

LINGUA

Page 15: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

15

IlDataProfilingindicachein

PRODOTTO_DESCRIZIONE(PRODOTTO:PRODOTTO,DESCRIZIONE:DESCRIZIONE,LINGUA)

Cisonoduechiavienonusasolasuperchiave(similealdiscorsoprecedentesuCUSTOMERADDRESS)

1) PRODOTTO,LINGUA2) DESCRIZIONE

PRODOTTO_DESCRIZIONE(PRODOTTO:PRODOTTO,LINGUA,DESCRIZIONE:DESCRIZIONE)

Perlaprimachiave

1) PRODOTTO,LINGUA

LoschemaERdiventa

Perlasecondachiave

2) DESCRIZIONE

LoschemaERdiventa

PRODOTTO_DESCRIZIONE

DESCRIZIONE B(0,N) (1,1) PRODOTTOA (0,N)(1,1)

LINGUA

PRODOTTO_DESCRIZIONE

DESCRIZIONE B(0,1) (1,1) PRODOTTOA (0,N)(1,1)

LINGUA

Page 16: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

16

NeldatabasecisonoseivaloridistintidiLINGUA

SELECTdistinctCultureFROMSalesLT.ProductModelProductDescription

QuindiperPRODOTTOlacardinalitàNsipuòspecificarein6

Questoèunlivellodidettagliononrichiestonellatesina.

Comenelcasodegliaddress,essendolacardinalitàmassimaconunvalorespecificato(6inquestocaso)sipotrebberoriportare6associazionitraPRODOTTOeDESCRIZIONE,unaperognilingua.

EssendoDESCRIZIONEnonutileperleanalisi,questapartenonvieneulteriormentesviluppata.

PRODOTTO_DESCRIZIONE

DESCRIZIONE B(0,1) (1,1) PRODOTTOA (0,6)(1,1)

LINGUA

Page 17: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

17

RicostruiamoloschemaERcomplessivo

Ricordiamocheperschemarelazionaledelnostroesempioridotto

PC(PC_ID,PPC_ID:PC,Name) AK:Name P(P_ID,Name,PC_ID:PC) AK:Name SOD(SO_ID,SOD_ID,P_ID:P,Qty) AK:SO_ID,P_ID

L’ERcompletoèilseguente:

Nelseguitononconsideriamol’anello/associazionericorsivasuPC:eventualigerarchiericorsivevengonoesaminatenellasecondaconsegna.

Page 18: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

18

SeconsideriamoanchelatabellaSalesOrderHeader,deveessereindicatalaforeignkeySO_ID:SOH

SOH(SO_ID…) SOD(SO_ID:SOH,SOD_ID,P_ID:P,Qty) AK:SO_ID,P_ID

quindiloschemaERprecedentediventa

Siaggiungeanchel’entitàSODD,ottenendo

Page 19: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

19

QuindisiaggiungonoaSOHledueforeignkeyversoADDRESS,ovvero ShipToAddressIDe BillToAddressID,

ElaforeignkeyversoCUSTOMER

InfinesiaggiungonoShippingAddresseMainOfficeAddressaCUSTOMERel’entitàMODELassociataaPRODUCT(P)

Page 20: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

20

Page 21: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

21

Note

1) Sonoindicatetutteleassociazionitraentità,adeccezionediquellechesièdecisodinonconsiderareora2) Moltiattributinonsonostatiindicati

Considerazioni

1) SHIPeBILLcoincidonosempreèsiconsideraunasolaassociazioneSHIP_BILL

Page 22: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

22

PROGETTAZIONECONCETTUALEDELLOSCHEMADIFATTO

FATTO:SOD,chehaduechiavi:K1={P,SOH}eK2={SOD_ID,SOH}

Dimensioni

1) PRODUCT2) SHIP_BILL:indirizzoSHIP_BILLdell’ordine3) CUSTOMER

SiaperPRODUCTcheperCUSTOMERnonspecificoseconsiderareilsuoIDoppureilsuoName:èovviocheseNameèchiave(alternativa)nelleanalisiconvieneusarlocomeattributodimensionale,mentrel’IDpuòdestarecomedescrittivo.

Page 23: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

23

ALBERODEGLIATTRIBUTI

DurantelaprogettazionesidecidediaggiungereancheledimensioniSCONTATO_S_NeDISCOUNT.

Page 24: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

24

Consideriamo ADDRESS Inizialmente ADDRESS (inteso come identificatore della tabella ADDRESS) ha CITY, COUNTRYREGION e STATEPROVINCE come figli (POSTALCODE viene considerato dopo), in quanto

ADDRESS(ADDRESS, CITY, COUNTRYREGION, STATEPROVINCE, … Quindi

Con il data profiling è stata individuata la dipendenza funzionale

CITY, STATEPROVINCE à COUNTRYREGION ed è stato verificato che il solo valore di CITY non determina né STATEPROVINCE né COUNTRYREGION, cioè non vale che

CITY à COUNTRYREGION CITY à STATEPROVINCE

Quindi per individuare una città (per costruire un’anagrafica di città) dobbiamo considerare la coppia CITY, STATEPROVINCE. Questo nuovo concetto, la città, intesa come CITY, STATEPROVINCE diventa un attributo dimensionale dell’albero degli attributi. Può essere denotato sia come CITY, STATEPROVINCE sia come CITY + STATEPROVINCE (in quanto il nome delle città viene co-struito concatenando il valore di CITY con quello di STATEPROVINCE e + è l’operatore di concatenazione tra stringhe in SQL)

ADDRESS

CONTRYREGION

STATEPROVINCE

CITY

Page 25: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

25

Si ottiene quindi

L’attributo CITY si può togliere come attributo dimensionale in quanto da solo non rappresenta niente di significativo. Infine si aggiunge anche la dipendenza funzionale STATEPROVINCE à COUNTRYREGIONE

ADDRESS

CONTRYREGION

STATEPROVINCE

CITTA=STATEPROVINCE+CITY

CITY

ADDRESS

CONTRYREGION

STATEPROVINCE

CITTA=STATEPROVINCE+CITY

Page 26: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

26

SCHEMA DI FATTO

SOD MODEL

PRODUCT

CUSTOMER

ADDRESS

CONTRYREGION

STATEPROVINCE

CITTA=STATEPROVINCE+CITY

SHIP_BILL

SHIPPING

MAINOFFICE

DISCOUNT SCONTATO_S_N

Page 27: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

27

Schema di Fatto TEMPORALE: nessuna delle due chiavi è inclusa tra le dimensioni, in quanto ho tolto SOH. Dipendenze funzionali tra le dimensioni:

DISCOUNT à SCONTATO_S_N CONDIVISIONE/CONVERGENZA :

SHIP_BILL che relazione ha con lo SHIPPING e MAINOFFICE address del customer? Verrà trattato nella seconda consegna.

Page 28: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

28

Quello che segue non è stato ancora svolto è verrà trattato mercoledì prossimo. Dimensione SCONTATO_S_N SCONTATO_S_N è un attributo dimensionale che non ho nello schema originale ma devo calcolare. SCONTATO_S_N = ‘SI’ quando SOD è scontato, ovvero quando un SOD è anche in SODD, mentre è ‘NO’ negli altri casi �

Per calcolarlo, ricordiamo che SODD�(SO_ID,�SOD_ID�:�SOD,���UPD,�Discount�)

Quindi devo fare un SOD left join SODD: quando un SOD è anche in SODD, e quindi SODD.SO_ID è non nullo, allora ‘SI’, altrimenti NO Il calcolo viene effettuato tramite una query che salvo in una vista che posso chiamare appunto SCONTATO_S_N. Tale vista avrà come chiave la chiave di SOD in quanto il valore di SCONTATO_S_N dipende dall’SOD CREATE VIEW SCONTATO_S_N AS

SELECT SO_ID, SOD_ID, SCONTATO_S_N=CASE WHEN SODD.SO_ID IS NULL THEN ‘NO’ ELSE ‘SI’ END

FROM SOD LEFT JOIN SODD ON (SOD.SO_ID= SODD.SO_ID AND SOD.SOD_ID= SODD.SOD_ID) Questo completa il calcolo di SCONTATO_S_N. Siccome occorre considerare anche DISCOUNT come dimensione e occorre verificare che DISCOUNT à SCONTATO_S_N, tenuto conto che anche DISCOUNT dipende da SOD, riporto anche DISCOUNT nella vista SCONTATO_S_N.

Page 29: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

29

Ho due possibilità: modificare (ALTER) quella già creata, aggiungendo DISCOUNT ALTER VIEW SCONTATO_S_N AS

SELECT SO_ID, SOD_ID, SCONTATO_S_N=CASE WHEN SODD.SO_ID IS NULL THEN ‘NO’ ELSE ‘SI’ END, DISCOUNT

FROM SOD LEFT JOIN SODD ON (SOD.SO_ID= SODD.SO_ID AND SOD.SOD_ID= SODD.SOD_ID) Crearne una nuova CREATE VIEW SCONTATO_S_N_E_DISCOUNT AS

SELECT SO_ID, SOD_ID, SCONTATO_S_N=CASE WHEN SODD.SO_ID IS NULL THEN ‘NO’ ELSE ‘SI’ END, DISCOUNT

FROM SOD LEFT JOIN SODD ON (SOD.SO_ID= SODD.SO_ID AND SOD.SOD_ID= SODD.SOD_ID) Finalmente possiamo verificare DISCOUNT à SCONTATO_S_N (la vista è a tutti gli effetti una tabella …) SELECT DISCOUNT FROM SCONTATO_S_N --- OPPURE SCONTATO_S_N_E_DISCOUNT GROUP BY DISCOUNT HAVING COUNT(DISTINCT SCONTATO_S_N)>1 -- OK, è vuota Vengono riportate nel seguito le query per il data profiling relativo a POSTALCODE (importante: vedere come effettuare il count di-stinct di una coppia di elementi )

Page 30: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

30

Il risultato è il seguente: nessuna delle seguenti dipendenze funzionali è vera (per CITTA si intende CITY+STATEPROVINCE)

CITY à POSTALCODE POSTALCODE à CITY CITTA à POSTALCODE POSTALCODE à CITTA

Quindi POSTALCODE resta come figlio di ADDRESS: ADDRESS à POSTALCODE. SELECT City,StateProvince FROM SalesLT.Address GROUP BY CITY,StateProvince HAVING count(distinct PostalCode) > 1 -- non vuota, quindi non vale StateProvince,CITY --> PostalCode -- coe' non vale CITTA --> Postalcode SELECT City FROM SalesLT.Address GROUP BY CITY HAVING count(distinct PostalCode) > 1 -- non vuota, quindi non vale CITY --> PostalCode SELECT PostalCode FROM SalesLT.Address GROUP BY PostalCode HAVING count(distinct CITY) > 1 -- non vuota, quindi non vale PostalCode --> CITY -- resta da vedere se Postalcode --> CITTA -- cioe' se Postalcode --> CITY,StateProvince -- per fare il count(distinct CITY,StateProvince)

Page 31: APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del … · 2015. 10. 29. · APPUNTI LEZIONE 22 OTTOBRE 2015 ... In SQL Queste soluzioni verranno valutate nelle prossime lezioni.

31

-- devo rendere CITY,StateProvince un solo valore -- tramite concatenazione tra stringhe, cioe' --- CITY + StateProvince SELECT PostalCode FROM SalesLT.Address GROUP BY PostalCode HAVING count(distinct CITY+StateProvince) > 1 -- non vuota, quindi non vale PostalCode --> CITTA SELECT * FROM AdventureWorksLT2008R2.SalesLT.Address WHERE PostalCode IN (SELECT PostalCode FROM AdventureWorksLT2008R2.SalesLT.Address GROUP BY PostalCode HAVING count(distinct CITY) > 1)