/* CAIO CÉSAR DIOGO DOS SANTOS C@IO.PRO.BR - 2022-07-25 DATABASE CREATION AND DOCUMENTATION SAMPLE */ CREATE SCHEMA Core GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OBJETOS COMUNS A DIFERENTES PARTES DO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Core' GO CREATE SCHEMA Musica GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OBJETOS RELACIONADOS AO TEMA MÚSICA, COMO ARTISTAS, ÁLBUNS, SHOWS, ETC.', @level0type = 'SCHEMA', @level0name = 'Musica' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'CORE' AND TABLE_NAME = 'PARAMETRO') BEGIN CREATE TABLE Core.Parametro ( ParametroId INT IDENTITY PRIMARY KEY, ParametroKey SYSNAME, ParametroValue SYSNAME, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (INICIO,FIM) ) WITH (SYSTEM_VERSIONING=ON (HISTORY_TABLE = Core.ParametroHistory)) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OS PARÂMETROS DO SISTEMA EVITANDO USO DE MÚLTIPLAS TABELAS PEQUENAS.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Parametro' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'IDENTIFICADOR ÚNICO DA TABELA. PK.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Parametro', @level2type = 'COLUMN', @level2name = 'ParametroId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A CHAVE/TÍTULO DO PARÂMETRO.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Parametro', @level2type = 'COLUMN', @level2name = 'ParametroKey' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A DESCRIÇÃO DO PARÂMETRO.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Parametro', @level2type = 'COLUMN', @level2name = 'ParametroValue' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'CORE' AND TABLE_NAME = 'UF') BEGIN CREATE TABLE Core.UF ( UFSigla CHAR(2) PRIMARY KEY, UFNome VARCHAR(50) NOT NULL UNIQUE, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio,Fim) ) WITH (SYSTEM_VERSIONING=ON (HISTORY_TABLE = Core.UFHistory)) CREATE INDEX IdxUFUFNome ON Core.UF (UFNome) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OS ESTADOS DO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'UF' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O NOME DO ESTADO.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'UF', @level2type = 'COLUMN', @level2name = 'UFNome' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A SIGLA DO ESTADO. PK.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'UF', @level2type = 'COLUMN', @level2name = 'UFSigla' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'CORE' AND TABLE_NAME = 'CIDADE') BEGIN CREATE TABLE Core.Cidade ( CidadeId INT IDENTITY PRIMARY KEY, CidadeNome VARCHAR(50) NOT NULL, UFSigla CHAR(2) REFERENCES Core.UF, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio,Fim) ) WITH (SYSTEM_VERSIONING=ON (HISTORY_TABLE = Core.CidadeHistory)) CREATE UNIQUE INDEX IdxUqCidadeCidadeNomeUFSigla ON Core.Cidade (CidadeNome, UFSigla) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA AS CIDADES DO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Cidade' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'IDENTIFICADOR ÚNICO DA TABELA. PK.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Cidade', @level2type = 'COLUMN', @level2name = 'CidadeId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O NOEM DA CIDADE.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Cidade', @level2type = 'COLUMN', @level2name = 'CidadeNome' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A SIGLA DO ESTADO. FK.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Cidade', @level2type = 'COLUMN', @level2name = 'UFSigla' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'CORE' AND TABLE_NAME = 'ESTABELECIMENTO') BEGIN CREATE TABLE Core.[Estabelecimento] ( EstabelecimentoId INT IDENTITY PRIMARY KEY, EstabelecimentoNome VARCHAR(50) NOT NULL, EstabelecimentoEndereco VARCHAR(500) NOT NULL, EstabelecimentoLat DEC(18,4), EstabelecimentoLong DEC(18,4), CidadeId INT REFERENCES Core.Cidade, ParametroIdTipoEstabelecimento INT REFERENCES Core.Parametro, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio,Fim) ) WITH (SYSTEM_VERSIONING=ON (HISTORY_TABLE = Core.EstabelecimentoHistory)) CREATE INDEX IdxEstabelecimentoEstabelecimentoNome ON Core.Estabelecimento (EstabelecimentoNome) CREATE INDEX IdxEstabelecimentoEstabelecimentoNomeEndereco ON Core.Estabelecimento (EstabelecimentoNome) INCLUDE (EstabelecimentoEndereco) CREATE INDEX IdxEstabelecimentoEstabelecimentoLatEstabelecimentoLong ON Core.Estabelecimento (EstabelecimentoLat, EstabelecimentoLong) CREATE INDEX IdxEstabelecimentoCidadeId ON Core.Estabelecimento (CidadeId) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OS ESTABELECIMENTOS REGISTRADOS NO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DA CIDADE. FK.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento', @level2type = 'COLUMN', @level2name = 'CidadeId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O ENDEREÇO DO ESTABELECIMENTO.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento', @level2type = 'COLUMN', @level2name = 'EstabelecimentoEndereco' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'IDENTIFICADOR ÚNICO DA TABELA. PK.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento', @level2type = 'COLUMN', @level2name = 'EstabelecimentoId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A LATITUDE DAS COORDENADAS DO ESTABELECIMENTO.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento', @level2type = 'COLUMN', @level2name = 'EstabelecimentoLat' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A LONGITUDE DAS COORDENADAS DO ESTABELECIMENTO.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento', @level2type = 'COLUMN', @level2name = 'EstabelecimentoLong' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O NOME DO ESTABELECIMENTO.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento', @level2type = 'COLUMN', @level2name = 'EstabelecimentoNome' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO TIPO DO ESTABELECIMENTO. FK.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='TABLE', @level1name = 'Estabelecimento', @level2type = 'COLUMN', @level2name = 'ParametroIdTipoEstabelecimento' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'MUSICA' AND TABLE_NAME = 'ARTISTA') BEGIN CREATE TABLE Musica.Artista ( ArtistaId INT IDENTITY PRIMARY KEY, ArtistaNome VARCHAR(50) NOT NULL, ArtistaFotoURL VARCHAR(1000), ArtistaSpotifyURL VARCHAR(1000), Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME(Inicio,Fim) ) WITH (SYSTEM_VERSIONING=ON (HISTORY_TABLE=Musica.ArtistaHistory)) CREATE INDEX IdxArtistaArtistaNome ON Musica.Artista (ArtistaNome) CREATE INDEX IdxArtistaArtistaNomeArtistaFotoURLArtistaSpotifyURL ON Musica.Artista (ArtistaNome) INCLUDE(ArtistaFotoURL, ArtistaSpotifyURL) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OS ARTISTAS REGISTRADOS NO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Artista' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O URL PARA A FOTO DO ARTISTA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Artista', @level2type = 'COLUMN', @level2name = 'ArtistaFotoURL' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'IDENTIFICADOR ÚNICO DA TABELA. PK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Artista', @level2type = 'COLUMN', @level2name = 'ArtistaId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O NOME DO ARTISTA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Artista', @level2type = 'COLUMN', @level2name = 'ArtistaNome' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O URL PARA PESQUISAR O ARTISTA NO SPOTIFY.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Artista', @level2type = 'COLUMN', @level2name = 'ArtistaSpotifyURL' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'MUSICA' AND TABLE_NAME = 'ALBUM') BEGIN CREATE TABLE Musica.Album ( AlbumId INT IDENTITY PRIMARY KEY, AlbumNome VARCHAR(200) NOT NULL, AlbumAno INT NOT NULL, AlbumCapaURL VARCHAR(1000) NOT NULL, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME(Inicio,Fim) ) WITH (SYSTEM_VERSIONING=ON (HISTORY_TABLE=Musica.AlbumHistory)) CREATE INDEX IdxAlbumAlbumNome ON Musica.Album (AlbumNome) CREATE INDEX IdxAlbumAlbumNomeAlbumAnoAlbumCapaURL ON Musica.Album (AlbumNome) INCLUDE (AlbumAno, AlbumCapaURL) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OS ÁLBUNS REGISTRADOS NO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Album' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O ANO DE LANÇAMENTO DO ÁLBUM.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Album', @level2type = 'COLUMN', @level2name = 'AlbumAno' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O URL PARA A CAPA DO ÁLBUM.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Album', @level2type = 'COLUMN', @level2name = 'AlbumCapaURL' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'IDENTIFICADOR ÚNICO DA TABELA. PK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Album', @level2type = 'COLUMN', @level2name = 'AlbumId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O NOME DO ÁLBUM.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Album', @level2type = 'COLUMN', @level2name = 'AlbumNome' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'MUSICA' AND TABLE_NAME = 'ARTISTAALBUM') BEGIN CREATE TABLE Musica.ArtistaAlbum ( ArtistaId INT REFERENCES Musica.Artista NOT NULL, AlbumId INT REFERENCES Musica.Album NOT NULL, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio, Fim), CONSTRAINT PkArtistaAlbum PRIMARY KEY (ArtistaId, AlbumId) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = Musica.ArtistaAlbumHistory)) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'TABELA DE LIGAÇÃO PARA RELACIONAMENTO N:N ENTRE ARTISTA E ÁLBUM.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ArtistaAlbum' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO ÁLBUM. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ArtistaAlbum', @level2type = 'COLUMN', @level2name = 'AlbumId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO ARTISTA. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ArtistaAlbum', @level2type = 'COLUMN', @level2name = 'ArtistaId' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'MUSICA' AND TABLE_NAME = 'GENEROMUSICALALBUM') BEGIN CREATE TABLE Musica.GeneroMusicalAlbum ( ParametroIdGeneroMusical INT REFERENCES Core.Parametro NOT NULL, AlbumId INT REFERENCES Musica.Album NOT NULL, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio, Fim), CONSTRAINT PkParametroIdGeneroMusicalAlbumId PRIMARY KEY (ParametroIdGeneroMusical, AlbumId) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = Musica.GeneroMusicalAlbumHistory)) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'TABELA DE LIGAÇÃO PARA RELACIONAMENTO N:N ENTRE GÊNERO MUSICAL E ÁLBUM', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'GeneroMusicalAlbum' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO ÁLBUM. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'GeneroMusicalAlbum', @level2type = 'COLUMN', @level2name = 'AlbumId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO GÊNERO MUSICAL. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'GeneroMusicalAlbum', @level2type = 'COLUMN', @level2name = 'ParametroIdGeneroMusical' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'MUSICA' AND TABLE_NAME = 'MUSICA') BEGIN CREATE TABLE Musica.Musica ( MusicaId INT IDENTITY PRIMARY KEY, MusicaNome VARCHAR(200) NOT NULL, MusicaOrdem TINYINT NOT NULL, MusicaDuracao TIME NOT NULL, AlbumId INT REFERENCES Musica.Album, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio, Fim) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = Musica.MusicaHistory)) CREATE INDEX IdxMusicaAlbumId ON Musica.Musica(AlbumId) CREATE INDEX IdxMusicaMusicaNome ON Musica.Musica(MusicaNome) CREATE INDEX IdxMusicaMusicaNomeMusicaOrdermMusicaDuracao ON Musica.Musica(MusicaNome) INCLUDE(MusicaOrdem, MusicaDuracao) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA AS MÚSICAS DOS ÁLBUNS DO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Musica' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO ÁLBUM. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Musica', @level2type = 'COLUMN', @level2name = 'AlbumId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A DURAÇÃO DA MÚSICA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Musica', @level2type = 'COLUMN', @level2name = 'MusicaDuracao' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'IDENTIFICADOR ÚNICO DA TABELA. PK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Musica', @level2type = 'COLUMN', @level2name = 'MusicaId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O NOME DA MÚSICA', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Musica', @level2type = 'COLUMN', @level2name = 'MusicaNome' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A ORDEM DA MÚSICA NO ÁLBUM.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Musica', @level2type = 'COLUMN', @level2name = 'MusicaOrdem' GO IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'MUSICA' AND TABLE_NAME = 'SHOW') BEGIN CREATE TABLE Musica.Show ( ShowId INT IDENTITY PRIMARY KEY, ShowData DATE NOT NULL, ShowHorario TIME NOT NULL, ShowDataCompra DATE NOT NULL, ShowValorIngresso DEC(9,2) NOT NULL DEFAULT 0 CHECK(ShowValorIngresso>=0), ShowValorEnvio DEC(9,2) NOT NULL DEFAULT 0 CHECK(ShowValorEnvio>=0), ShowQtdIngresso INT NOT NULL DEFAULT 1 CHECK(ShowQtdIngresso>0), ShowFotoURL VARCHAR(1000), ArtistaId INT NOT NULL REFERENCES Musica.Artista, EstabelecimentoId INT NOT NULL REFERENCES Core.Estabelecimento, ParametroIdTipoIngresso INT REFERENCES Core.Parametro, ParametroIdTurne INT REFERENCES Core.Parametro, ParametroIdGeneroMusical INT REFERENCES Core.Parametro, ParametroIdFestival INT REFERENCES Core.Parametro, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio, Fim) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = Musica.ShowHistory)) END GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA OS DADOS DOS SHOWS REGISTRADOS NO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO ARTISTA. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ArtistaId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO ESTABELECIMENTO. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'EstabelecimentoId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO FESTIVAL. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ParametroIdFestival' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO GÊNERO MUSICAL. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ParametroIdGeneroMusical' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DO TIPO DO INGRESSO. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ParametroIdTipoIngresso' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O CÓDIGO DA TURNÊ. FK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ParametroIdTurne' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A DATA DO SHOW.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowData' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A DATA DE COMPRA DO INGRESSO.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowDataCompra' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O URL PARA A IMAGEM DO SHOW.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowFotoURL' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O HORÁRIO DE INÍCIO DO SHOW.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowHorario' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'IDENTIFICADOR ÚNICO DA TABELA. PK.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A QUANTIDADE DE INGRESSOS COMPRADOS.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowQtdIngresso' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O VALOR DE ENVIO DO INGRESSO.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowValorEnvio' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O VALOR DO INGRESSO.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'Show', @level2type = 'COLUMN', @level2name = 'ShowValorIngresso' GO CREATE OR ALTER PROC Core.UspUpdateParametroIndex WITH ENCRYPTION, EXEC AS OWNER AS DECLARE @CMD NVARCHAR(MAX) = (SELECT DISTINCT CONCAT('IF NOT EXISTS (SELECT * FROM SYS.INDEXES WHERE NAME = ''IdxParametro',P.ParametroKey,''') BEGIN CREATE NONCLUSTERED INDEX IdxParametro', ParametroKey,' ON Core.Parametro(ParametroValue) INCLUDE(ParametroKey) WHERE ParametroKey = ''',P.ParametroKey,''' END; ') FROM Core.Parametro P FOR XML PATH('')) EXEC (@CMD) UPDATE STATISTICS Core.Parametro WITH FULLSCAN GO EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'CRIA OS ÍNDICES NÃO EXISTENTES DA TABELA PARÂMETRO E ATUALIZA SUAS ESTATÍSTICAS.', @level0type = 'SCHEMA', @level0name = 'Core', @level1type ='PROCEDURE', @level1name = 'UspUpdateParametroIndex' GO DECLARE @CMD NVARCHAR(MAX) = ( SELECT CONCAT('EXEC SP_ADDEXTENDEDPROPERTY @name = ''DEFINITION'', @value = ''ARMAZENA A DATA DE CRIAÇÃO DA LINHA. CAMPO USADO PARA O CONTROLE DE VERSIONAMENTO DO SISTEMA.'', @level0type = ''SCHEMA'', @level0name = ',QUOTENAME(TABLE_SCHEMA,''''),', @level1type =',QUOTENAME(CASE WHEN LEFT(TABLE_NAME,2) = 'UV' THEN 'VIEW' ELSE 'TABLE' END,''''),', @level1name = ',QUOTENAME(TABLE_NAME,''''),', @level2type = ''COLUMN'', @level2name = ',QUOTENAME(COLUMN_NAME,''''),'; ') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA NOT IN ('USERVIEW', 'DBO', 'SYS') AND TABLE_NAME NOT LIKE '%HISTORY' AND COLUMN_NAME = 'INICIO' FOR XML PATH('') ) EXEC (@CMD) SET @CMD = (SELECT CONCAT('EXEC SP_ADDEXTENDEDPROPERTY @name = ''DEFINITION'', @value = ''ARMAZENA A DATA DE EXCLUSÃO DA LINHA. CAMPO USADO PARA O CONTROLE DE VERSIONAMENTO DO SISTEMA.'', @level0type = ''SCHEMA'', @level0name = ',QUOTENAME(TABLE_SCHEMA,''''),', @level1type =',QUOTENAME(CASE WHEN LEFT(TABLE_NAME,2) = 'UV' THEN 'VIEW' ELSE 'TABLE' END,''''),', @level1name = ',QUOTENAME(TABLE_NAME,''''),', @level2type = ''COLUMN'', @level2name = ',QUOTENAME(COLUMN_NAME,''''),'; ') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA NOT IN ('USERVIEW', 'DBO', 'SYS') AND TABLE_NAME NOT LIKE '%HISTORY' AND COLUMN_NAME = 'FIM' FOR XML PATH('') ) EXEC (@CMD) CREATE TABLE Musica.ShowImgShow ( ShowId INT REFERENCES Musica.Show, ParametroIdImgShow INT REFERENCES Core.Parametro, Inicio DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN, Fim DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN, PERIOD FOR SYSTEM_TIME (Inicio,Fim), CONSTRAINT PkShowIdParametroIdImgShow PRIMARY KEY (ShowId,ParametroIdImgShow) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = Musica.ShowImgShowHistory)) EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'TABELA DE LIGAÇÃO PARA RELACIONAMENTO 1:1 ENTRE SHOW E IMAGEM USADA EM RELATÓRIOS.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ShowImgShow' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O ID DO SHOW.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ShowImgShow', @level2type = 'COLUMN', @level2name = 'ShowId' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA O ID DA IMAGEM DO SHOW USADA EM RELATÓRIOS.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ShowImgShow', @level2type = 'COLUMN', @level2name = 'ParametroIdImgShow' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A DATA DE CRIAÇÃO DA LINHA. CAMPO USADO PARA O CONTROLE DE VERSIONAMENTO DO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ShowImgShow', @level2type = 'COLUMN', @level2name = 'Inicio' EXEC SP_ADDEXTENDEDPROPERTY @name = 'DEFINITION', @value = 'ARMAZENA A DATA DE EXCLUSÃO DA LINHA. CAMPO USADO PARA O CONTROLE DE VERSIONAMENTO DO SISTEMA.', @level0type = 'SCHEMA', @level0name = 'Musica', @level1type ='TABLE', @level1name = 'ShowImgShow', @level2type = 'COLUMN', @level2name = 'Fim'