Creare tabelle in MySQL

Documenti analoghi
Introduzione a MySQL. Definizione SQL. Esempio

Basi di Da( MySQL & MySQL Workbench. Anna Monreale

Dichiarazione degli schemi in SQL DDL 1

GESTIONE ASSICURAZIONI AUTO

Corso di Basi di Dati A.A. 2015/2016

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

GESTIONE VOTI SCOLASTICI

Laboratorio di Basi di Dati Esercizio 8.4/9.1

Fondamenti di Informatica 2

Gestione NARRATIVA del 900

Principi di Progettazione del Software a.a Il linguaggio SQL. Prof. Luca Mainetti Università del Salento

Manuale SQL. Manuale SQL - 1 -

GESTIONE ABBONAMENTI RIVISTE

Introduzione a MySQL

SQL -DDL. FONDISTA(Nome, Nazione, Età) GAREGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza)

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

LABORATORIO di INFORMATICA

MS Access: Tutorial Tabelle, Relazioni

MYSQL. Avviare MySQL Per avviare il server MySQL basta lanciare il Servizio Mysql presente (aggiunto) tra i servizi di sistema.

Unità 2.2 Comandi sulle tabelle

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Esempio di database relazionale con l utilizzo del prodotto MySQL

Primi passi col linguaggio C

C3 IL DBMS MICROSOFT ACCESS

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Database Modulo 4 RELAZIONI TRA TABELLE

Tipi di dato semplici

PROGETTAZIONE DI DATABASE Linguaggio SQL

Laboratorio di Basi di Dati Per Bioinformatica

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Aule. La classe in questo caso è composta solamente dal nome. Inserire quindi tale attributo all'interno della casella di testo indicata.

Basi di Dati Relazionali

Bibliografia. INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. Definizione di DB e di DBMS

MySQL progettazione di un database per un mobilificio

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

5 SQL : Definizione e manipolazione dei dati

Introduzione al C++ (continua)

Corso di Basi di Dati A.A. 2013/2014

MY SQL Guida MySQL di base

Basi di Dati prof. Letizia Tanca

SQL: DDL, VI, Aggiornamenti e Viste

INTRODUZIONE ALLE BASI DATI RELAZIONALI

Elementi di gestione di dati con MS Access 2000

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

Modulo 2: Strutture fondamentali della programmazione Java

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Lettura da tastiera e scrittura su monitor

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Cap. 2 - Rappresentazione in base 2 dei numeri interi

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Operazioni numeriche - Input

ESERCITAZIONI ACCESS

Interrogazioni nidificate

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

SQL - Tipi di dato Il linguaggio SQL

DUE GRUPPI DI COMANDI

Definire una chiave primaria. Microsoft Access. Definire una chiave primaria. Definire una chiave primaria. Definire una chiave primaria

CORSO ACCESS PARTE IV

Gestione delle tabelle

SQL. SQL (Structured Query Language) è un linguaggio di interrogazione per basi di dati relazionali

Appunti del corso di Informatica 1 (IN110 Fondamenti) 5 Rappresentazione delle informazioni

Programmazione in Java (I modulo)

GESTIONE MAGAZZINO 2

SQL (STRUCTURED QUERY LANGUAGE)

Relazioni e tabelle. Introduzione alle Basi di Dati Relazionali. Relazioni uno a uno. Esempio

Foglio Elettronico Lezione 1

Costanti e Variabili

CAPITOLO V. DATABASE: Il modello relazionale

Capitolo 4: Tabelle. y(x) = x 3 ì 2x. Capitolo 4: Tabelle 67. Nota: le tabelle non sono disponibili nel modo di rappresentazione grafica 3D.

Dott.Ing.Ivan Ferrazzi. Banche dati e MySQL. Introduzione a MySQL. Dott. Ing. Ivan Ferrazzi V1.1 del 05/02/2014 1/39

Modello Relazionale. Esempio (Relazione) A x B. Introduzione. Relazione: definizione. I fattori del successo. Relazione

PROGETTAZIONE LOGICA. Prof. Ing. Alfredo GARRO 1/6. Artista. Cantante. DataDiNascita. Codice. Nazionalità

Esercitazione 1: DB-MAIN e modello E/R

SQL. Storia e standard

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

LA PROGETTAZIONE LOGICA

LE BASI DI DATI. Seconda parte La progettazione di database Relazionali SCHEMA LOGICO e SCHEMA FISICO Costruzione delle tabelle

DATABASE PER IL WEB. Programmazione Web 1

Sistemi di Elaborazione delle Informazioni. Basi di dati. Tullio Facchinetti 29 ottobre :26

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

L interfaccia a riga di comando di MySql

LE NOVITÀ Eppur si muove...61 Applicazioni ad alta disponibilità...62 Sicurezza...62

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

GESTIONE MAGAZZINO 1

Rappresentazione binaria delle variabili (int e char)

TABELLE RECORD E CAMPI

Triggers Esercitazione 1

SQL (STRUCTURED QUERY LANGUAGE)

Gestione e Analisi dei Dati. Lezione 2 Vincoli su attributo Selezioni semplici su una tabella

Riferimenti semi-bibliografici:

Utilizzo delle Maschere in Microsoft Access

Lezione 4. Dallo schema ER al relazionale

SQL: Concetti Base -Prima Parte-

Struttura dei programmi C

Transcript:

Creare tabelle in MySQL Alessandro Bugatti alessandro.bugatti@istruzione.it) 6 novembre 2016 1 Tipi di dati in MySQL Come visto nella precedente dispensa l'istruzione CREATE TABLE ci permette di creare lo schema all'interno del quale andremo poi a memorizzare i nostri dati. Nell'esempio visto i dati erano solamente di due tipi, VARCHAR e DATE, ma nella realtà noi potremmo avere bisogno di rappresentare dati di altro tipo ad esempio numerici). MySQL permette di utilizzare tipi di dati appartenenti a tre diverse famiglie: valori numerici, valori stringa e data/ora. 1.1 I valori numerici I valori numerici sono tutti quei valori come 456 oppure 129.34, cioè degli interi oppure dei numeri in virgola mobile. Sia gli interi che i numeri in virgola mobile possono essere di diverso tipo, come riassunto nella tabella 1. Tipo TINYINT SMALLINT MEDIUMINT INT BIGINT FLOAT DOUBLE DECIMAL Tabella 1: Dati di tipo numerico Signicato Intero molto piccolo 1 byte) Intero piccolo 2 byte) Intero di medie dimensioni 3 byte) Intero 4 byte) Intero di grandi dimensioni 8 byte) Numero in virgola mobile in precisione singola Numero in virgola mobile in precisione doppia Numero in virgola mobile rappresentato come una stringa Questa tabella mostra solo i tipi di dati, per una descrizione più dettagliata è utile consultare il manuale di MySQL della versione che si sta utilizzando. Le uniche cose che possiamo notare sono: nei tipi interi l'unica dierenza è la dimensione in byte e quindi il numero massimo rappresentabile: una buona regola è quella di scegliere sempre il tipo più piccolo che permetta di rappresentare completamente il dominio dell'attributo. Inoltre ognuno di questi tipi può essere dichiarato come UNSIGNED per evitare che vi possano essere assegnati valori negativi e anche di tipo AUTO_INCREMENT per far si che ogni valore contenuto venga generato automaticamente dal DBMS incrementando di uno il valore precedente un solo attributo nella tabella può essere di tipo AUTO_INCREMENT, solitamente lo è la chiave primaria). 1

i tipi in virgola mobile servono a rappresentare numeri con virgola e mentre l'unica dierenza fra FLOAT e DOUBLE è il range e la precisione che si ottiene un DOUBLE ha una capacità rappresentativa doppia di un FLOAT) i tipi DECIMAL utilizzano una rappresentazione di tipo stringa che permette di avere una precisione arbitraria è quindi possibile rappresentare numeri con un qualsiasi numero di cifre) a scapito dell'ecienza nei calcoli. 1.2 I valori stringa I valori stringa servono a rappresentare qualsiasi tipo di dato che non sia un numero o una data. Non sono altro che una serie di byte che possono servire a rappresentare del testo che è il caso più comune), ma anche le binari, multimediali, immagini, ecc. Nella tabella 2 sono indicati tutto i tipi di dato stringa possibili. Tipo CHAR VARCHAR TINYBLOB BLOB MEDIUMBLOB LONGBLOB TINYTEXT TEXT MEDIUMTEXT LONGTEXT ENUM SET Tabella 2: Dati di tipo stringa Signicato Stringa di caratteri a lunghezza ssa Stringa di caratteri a lunghezza variabile BLOB binary large object oggetto binario di grandi dimensioni) di dimensioni molto ridotte BLOB di dimensioni ridotte BLOB di medie dimensioni BLOB di grandi dimensioni Stringa di testo di dimensioni molto ridotte Stringa di testo di dimensioni ridotte Stringa di testo di medie dimensioni Stringa di testo di grandi dimensioni Enumerativo: a ogni valore della colonna può corrispondere un solo elemento di un insieme enumerativo Un insieme: a ogni valore della colonna possono essere assegnati più elementi di un insieme Anche in questo caso per informazioni più precise è necessario consultare il manuale MySQL, noi ci limitiamo alle seguenti osservazioni: i tipi CHAR e VARCHAR sono quelli più utilizzati per rappresentare delle stringhe e ambedue hanno un valore massimo di byte di 255, che viene rappresentato racchiudendolo tra parentesi tonde. La dierenza è che mentre i tipi CHAR hanno una lunghezza ssa indipendentemente dalla lunghezza eettiva dei dati contenuti se ad esempio abbiamo un CHAR20) tutti i dati di quella colonna occuperanno 20 byte), i VARCHAR occupano solo lo spazio strettamente necessario a contenere i dati 1. 1 Alcune volte il motore di MySQL può convertire delle nostre dichiarazioni di tipo da CHAR a VARCHAR in base a una logica di maggior ecienza. 2

i tipi BLOB e TEXT sono simili fra i loro a parte il fatto che i dati nei BLOB sono di tipo binario, mentre nei campi di tipo TEXT sono dei caratteri appartenenti ad un certo insieme di caratteri. Questo inuenza le operazioni di ordinamento e comparazione che portano a risultati dierenti. All'interno poi di ognuno di questi tipi ci sono dei sottotipi TINY, MEDIUM, LONG) la cui dierenza risiede solamente nella quantità di byte memorizzabili. Quindi i campi di tipo TEXT sono da utilizzare per memorizzare testi abbastanza lunghi, superiori ai 255 caratteri, mentre in campi BLOB per le binari, come foto, documenti, le audio 2, ecc. i tipi ENUM e SET permettono di inserire dei valori che sono presenti all'interno di un certo insieme e la dierenza è che mentre ENUM permette di inserire un solo valore, SET permette di inserire un insieme di valori, eventualmente anche tutti. 1.3 I valori data e ora Gli ultimi tipi di dati che prendiamo in considerazione sono quelli di tipo data e ora, che sono rappresentati nella tabella 3. Tipo DATE TIME DATETIME TIMESTAMP YEAR Tabella 3: Dati di tipo data e ora Signicato Valore data in formato 'SSAA-MM-GG' Valore tempo in formato 'oo:mm:ss' Valore data e tempo in formato 'SSAA-MM-GG oo:mm:ss' Valore timestamp in formato SSAAMMGGoommss Valore anno in formato SSAA L'unica osservazione per questo tipo di dati il cui signicato è piuttosto evidente è per il tipo timestamp: esso serve per tenere traccia di quando siano state eettuate le ultime modiche all'interno di un record. 2 Esempi di creazione di tabelle Proviamo adesso a utilizzare i tipi di dati visti in precedenza per creare delle tabelle 3, aggiungendo anche la possibilità di denire la chiave primaria. Supponiamo di voler rappresentare un'entità articolo contenente: un ID che si autoincrementa e che farà da chiave primaria un nome che può essere lungo al massimo 100 caratteri una descrizione che può avere una lunghezza di qualche centinaia di caratteri 2 Nella pratica i campi BLOB non vengono utilizzati molto spesso, perchè si preferisce memorizzare gli oggetti binari nel le system e inserire in un campo testuale all'interno del database le informazioni per recuperarli, quindi il nome del le e il suo percorso. 3 Può essere pratico quando si utilizza il client a riga di comando di MySQL per eseguire delle istruzioni di scriverle all'interno di Scite o di qualsiasi editor di testo e poi copiarle all'interno della nestra dove è in esecuzione il client: questo permetterà generalmente di dover digitare meno codice a fronte di eventuali errori o di ripetizioni di istruzioni simili. 3

la data in cui è entrato in produzione In questo caso l'istruzione DDL 4 da utilizzare sarà: CREATE TABLE a r t i c o l o nome CHAR100) NOT NULL, d e s c r i z i o n e TEXT NOT NULL, data_di_produzione DATE NOT NULL Come possiamo essere sicuri di avere eettivamente creato la tabella e che questa contenga i campi desiderati? Per visualizzare le tabelle contenute all'interno di un database è suciente digitare l'istruzione: SHOW TABLES; mentre per visualizzare la struttura della tabella utilizzeremo l'istruzione: DESCRIBE a r t i c o l o ; Passiamo a un altro esempio: seguenti attributi: vogliamo rappresentare l'entità libro con i il codice ISBN che sarà la chiave primaria ed è composto da 16 caratteri il titolo l'autore il prezzo in euro la data di pubblicazione un timestamp che ci permettà di risalire a quando il record relativo ad un determinato libro è stato inserito nel database In questo caso la CREATE TABLE potrebbe essere di questo tipo: CREATE TABLE l i b r o ISBN CHAR16) NOT NULL PRIMARY KEY, t i t o l o VARCHAR150) NOT NULL, autore VARCHAR 5 0) NOT NULL, prezzo FLOAT NOT NULL, data_ di_ pubblicazione DATE NOT NULL, data_ di_ inserimento TIMESTAMP NOT NULL 4 Data Denition Language, è l'insieme delle istruzioni SQl che servono a creare la struttura del database. 4

Si può notare come sia stato scelto di rappresentare il codice ISBN come un CHAR di 16 caratteri, perchè la dimensione è sempre la stessa e quindi sembrava più adatto. In realtà, utilizzando l'istruzione DESCRIBE, si potrà notare come esso sia stato convertito in un VARCHAR a nostra insaputa: questo è dovuto alle regole di ottimizzazione interne di MySQL e non può essere modicato. Per dare un valore corretto all'attributo data_di_inserimento sarà opportuno nell'istruzione INSERT utilizzare la funzione NOW), che ritorna il timestamp corrente. Vediamo un ultimo esempio nel quale vogliamo creare l'entità atleta composta da: ID che è autoincrementante e sarà la chiave primaria nome cognome nazionalità altezza peso sesso MASCHIO o FEMMINA) L'istruzione che dovremo lanciare sarà: CREATE TABLE a t l e t a nome CHAR50) NOT NULL, cognome CHAR 5 0) NOT NULL, a l t e z z a FLOAT NOT NULL, peso FLOAT NOT NULL, s e s s o ENUM ' Maschio ', 'Femmina ' ) In quest'ultimo esempio si può notare come il campo sesso sia di tipo ENUM e l'insieme dei valori possibili sia 'Maschio' o 'Femmina'. Questo comporterà che nella fase di inserimento verranno accettati solo questi due valori e riutati tutti gli altri. 3 Vincoli di integrità referenziale Il modello relazionale è fondato sul meccanismo di referenzialità indotto dalla presenza delle chiavi primarie PRIMARY KEY) e delle chiave esterne FOREI- GN KEY) all'interno di tabelle che sono tra di loro legate da una relazione nel modello ER. Avendo ad esempio un'entità studente e un'entità voto che sono nella relazione 1:N uno studente può prendere più voti, un voto è relativo a un solo 5

studente, studente e voto saranno due tabelle e la tabella voto conterrà come attributo una chiave esterna, chiamata ad esempio id_studente, che farà riferimento alla chiave primaria di uno studente. Una volta compreso il meccanismo con cui si possono creare delle relazioni tra tabelle, viene naturale domandarsi se è possibile evitare il vericarsi di situazioni che ledano l'integrità dei dati, ad esempio la presenza di un voto che contenga un valore di id_studente che non ha un corrispondente negli id della tabella studente. A questo proposito la maggior parte dei database relazionali ore la possibiltà di creare vincoli di integrità referenziale 5, proprio con lo scopo di salvaguardare l'integrità dei dati in un database. Facendo riferimento all'esempio degli studenti e dei voti il vincolo di integrità referenziale può essere creato nel modo seguente: CREATE TABLE voto punteggio float NOT NULL, data DATE NOT NULL, t i p o l o g i a ENUM ' S c r i t t o ', ' Orale ', ' Altro ' ), id_ studente INT UNSIGNED, FOREIGN KEY id_studente ) REFERENCES studente ID ) Da notare che la chiave esterna deve essere dello stesso tipo della chiave primaria in questo esempio intero senza segno), altrimenti verrà mostrato un messaggio di errore che impedirà di creare la tabella. Una volta imposto questo vincolo il database impedirà l'inserimento di voti che non facciano riferimento a degli studenti presenti nel database, garantendo così l'integrità referenziale anche a fronte di errori nell'inserimento o a errori di programmazione dell'applicativo che utilizza il database. Un ultimo passaggio, che è la conseguenza naturale dell'imposizione di questi vincoli, è demandare al database anche la gestione delle problematiche che si potrebbero avere durante l'aggiornamento o la cancellazione di uno studente. In pratica si vuole che il database, in maniera automatica, gestisca le seguenti condizioni: cosa succede cambiando ON UPDATE) l'id di uno studente che ha dei voti nel database? cosa succede eliminando ON DELETE) uno studente che ha dei voti nel database? Entrambe le situazioni, se non gestite, darebbero dei problemi, quindi esistono delle istruzioni per indicare al database come reagire nel caso di UPDATE o 5 Si tenga presente che in linea di principio un database relazionale non necessita della presenza di meccanismi per la creazione di vincoli di integrità referenziale: ad esempio MySQL no alla versione 3 lasciava al programmatore la responsibilità di gestire le problematiche legate all'integrità referenziale. 6

DELETE di dati legati a dati presenti in altre tabelle attraverso un vincolo referenziale. Le possibili scelte sono tre e sono le seguenti RESTRICT equivalente a NO ACTION): l'azione viene impedita, cioè non si possono modicare/cancellare dati se hanno altri dati che fanno riferimento a loro in altre tabelle CASCADE: l'azione viene eseguita in cascata sui dati collegati, ad esempio eliminando uno studente verrebbero eliminati tutti i suoi voti SET NULL: la chiave esterna dei dati che fanno riferimento al dato modicato/eliminato viene impostata a NULL La scelta tra queste tre azioni spetta al progettista, che in base al contesto sceglierà l'azione più adatta. Tornando all'esempio precedente, potrebbe essere modicato in questo modo per aggiungere le azioni da svolgere in relazione alle situazioni di modica e cancellazione CREATE TABLE voto punteggio float NOT NULL, data DATE NOT NULL, t i p o l o g i a ENUM ' S c r i t t o ', ' Orale ', ' Altro ' ), id_ studente INT UNSIGNED, FOREIGN KEY id_studente ) REFERENCES studente ID ) ON UPDATE CASCADE ON DELETE RESTRICT In questo modo si indica che eventuali cambiamenti sulla chiave primaria 6 di studente modicheranno automaticamente la chiave esterna id_studente relativa allo studente modicato, mentre invece l'eliminazione di uno studente verrà impedita nel caso egli abbia dei voti volendolo eliminare sarà quindi necessario prima eliminare i suoi voti e solo successivamente lo studente). Da notare la mancanza di virgole dopo ogni riga delle istruzioni legate alle azioni, perchè comunque fanno ancora parte dell'istruzione FOREIGN KEY. 6 Cambiamenti della chiave primaria nella realtà non capitano di frequente, soprattutto quando questa è una chiave articiale. 7