Pular para o conteúdo

Bancos de Dados

Ciência da Computação do A-Level · Tópico 8

Treinar
Videoaula para este tópico Abrir a página do vídeo
17:18

Bancos de Dados & Modelo Relacional

Antes dos bancos de dados, cada programa mantinha seus próprios arquivos planos — um arquivo por programa. Imagine uma loja. O programa de vendas, o programa de faturamento e o programa de envio…

Narração em inglês · Legendas em inglês + 中文 gravadas

8.1

Armazenamento baseado em arquivos e seus limites

Programa
Os candidatos devem ser capazes de: Notas e orientações
Demonstre compreensão das limitações do uso de uma abordagem baseada em ficheiros para o armazenamento e recuperação de dados
Descreva as características de uma base de dados relacional que abordam as limitações de uma abordagem baseada em ficheiros
Demonstre compreensão e utilize a terminologia associada a um modelo de base de dados relacional Incluindo entidade, tabela, registo, campo, tupla, atributo, chave primária, chave candidata, chave secundária, chave estrangeira, relação (um-para-muitos, um-para-um, muitos-para-muitos), integridade referencial, indexação
Utilize um diagrama entidade-relacionamento (E-R) para documentar um projeto de base de dados
Demonstre compreensão do processo de normalização Primeira Forma Normal (1NF), Segunda Forma Normal (2NF) e Terceira Forma Normal (3NF)
Explique porque um conjunto dado de tabelas de base de dados está ou não em 3NF
Produza um projeto de base de dados normalizado para uma descrição de uma base de dados, um conjunto dado de dados ou um conjunto dado de tabelas

Fonte: Programa Cambridge International

Antes dos bancos de dados, os programas armazenavam dados em arquivos planos 平面文件 — geralmente um arquivo por programa. Isso é fine para pequenos dados, mas falha em escala.

Uma mão procurando em um gabinete de arquivamento de cartões
O armazenamento baseado em arquivos mantém dados em arquivos separados, como papéis em um arquivo — difícil de pesquisar e fácil de duplicar

Limitações

  • redundância de dados 数据冗余 — os mesmos dados (o endereço de um cliente) estão em vários arquivos, um por programa, desperdiçando armazenamento e exigindo atualização de todas as cópias.
  • inconsistência de dados 数据不一致 — quando uma cópia é atualizada e outra não, os arquivos divergem e ninguém sabe qual está correta.
  • dependência de dados — cada programa é escrito para o layout exato de seus arquivos; alterar o comprimento de um campo ou adicionar um campo exige reescrever todo programa que lê o arquivo.
  • sem acesso compartilhado — um arquivo é bloqueado enquanto um programa o usa, impedindo que usuários trabalhem nos dados simultaneamente.
  • integridade fraca 完整性 — nenhuma regra central impede valores inválidos ou links para clientes inexistentes; segurança fraca — o acesso é por arquivo, não por campo; e consultas entre arquivos exigem um novo programa cada vez.
Os programas Folha de Pagamento e Vendas cada um liga ao seu próprio arquivo de dados separado, então o campo Número do Funcionário é armazenado duas vezes
A abordagem baseada em arquivos: cada programa mantém seus próprios arquivos

Um banco de dados relacional 关系数据库 corrige isso armazenando dados em tabelas gerenciadas por um único software (DBMS) que todos os programas usam.

Um SGBD segurando tabelas design, regras de validação, direitos de acesso e os dados, com um único banco de dados compartilhado, usado tanto pelos aplicativos de folha de pagamento quanto de vendas
A abordagem de banco de dados: um DBMS serve a todos os programas

Por que um banco de dados relacional é melhor — a resposta de três pontos. Cada item de dado é armazenado uma única vez, em uma tabela, e as tabelas são ligadas por chaves, não havendo redundância nem inconsistência; os dados são independentes dos programas, que solicitam ao SGBD o que precisam e permanecem inalterados quando a estrutura muda; e o SGBD aplica regras de integridade, controla o acesso por usuário e por campo, permite múltiplos usuários simultaneamente e executa qualquer consulta sem a necessidade de escrever um novo programa.

Exemplo resolvido. Uma oficina armazena seus clientes, dispositivos e serviços de reparo usando uma abordagem baseada em arquivos, com um arquivo por programa. Cite três problemas isso causa e descreva como um banco de dados relacional os eliminaria.

O nome e o número de telefone do cliente estão armazenados no arquivo de reparos e também no arquivo de faturas (redundância); quando um cliente muda de número, um arquivo é atualizado e o outro não (inconsistência); e quando a loja quer um novo relatório — reparos por técnico — um novo programa precisa ser escrito para ler os arquivos (sem consultas ad hoc). Em um banco de dados relacional, o cliente é armazenado uma única vez em uma tabela CUSTOMER e referenciado pelo CustomerID na tabela REPAIR, então a alteração é feita uma única vez e vista em todos os lugares; o relatório é uma única consulta SQL.

Vocabulário Treinar
Inglês Chinês Pinyin
DBMS/ˌdiː biː em ˈes/ 数据库管理系统 shù jù kù guǎn lǐ xì tǒng
8.1

Modelo relacional — termos

  • tabela 表 (relação) — uma grade de linhas e colunas; uma tabela por tipo de entidade 实体 (ex: CUSTOMER).
  • registro 记录 (linha, também chamado de tupla 元组) — uma linha; uma instância da entidade.
  • campo 字段 (coluna, também chamado de atributo 属性) — uma coluna; uma informação sobre cada registro.
  • chave primária 主键 — um campo (ou campos) que identifica unicamente cada registro; nunca nulo ou duplicado.
  • chave estrangeira 外键 — um campo cujo valor corresponde à chave primária de outra tabela, ligando as duas.
  • chave composta 复合键 — uma chave primária formada por dois ou mais campos juntos.
  • chave candidata 候选键 — qualquer campo(s) que poderia ser a chave primária.
  • chave secundária 次键 — um campo não primário que é indexado para busca rápida.
  • indexação 索引 — criar um índice em um campo para que buscas e junções sejam mais rápidas.
  • integridade referencial 参照完整性 — todo valor de chave estrangeira deve corresponder a uma chave primária existente (nenhum registro órfão).

Uma tabela é escrita em notação resumida com a chave primária sublinhada e chaves estrangeiras anotadas:

CUSTOMER(CustomerID, Name, Phone)
ORDER(OrderID, CustomerID, OrderDate)   -- CustomerID is FK → CUSTOMER
Duas tabelas ligadas por uma chave estrangeira: a tabela CUSTOMER tem a chave primária CustomerID; a tabela ORDER tem sua própria chave primária OrderID mais uma chave estrangeira CustomerID cujo valor corresponde a um CustomerID na CUSTOMER
Uma chave estrangeira liga duas tabelas: ORDER.CustomerID corresponde à chave primária CUSTOMER.CustomerID

Exemplo resolvido. Explique o significado de entidade, chave primária e integridade referencial em um banco de dados relacional, e complete a tabela de termo ↔ descrição para tupla e atributo.

Uma entidade é algo sobre o qual dados são armazenados — uma pessoa, objeto ou evento — que se torna uma tabela. Uma chave primária é o atributo (ou combinação de atributos) que identifica unicamente cada registro em uma tabela. Integridade referencial significa que todo valor de chave estrangeira deve corresponder ao valor de uma chave primária na tabela a que se refere, para que um registro não possa apontar para um que não existe. Uma tupla é uma linha de uma tabela (um registro); um atributo é uma coluna (um campo). Aprenda os pares: tabela/relação, registro/tupla, campo/atributo.

Explorar

Leia uma tabela relacional com SELECT

Uma tabela relacional é apenas linhas (registros) e colunas (campos). WHERE mantém as linhas que correspondem a uma condição; SELECT então mantém apenas as colunas que você pediu.

Vocabulário Treinar
Inglês Chinês Pinyin
table/ˈteɪbl/ 表 biǎo
8.1

Diagramas de entidade-relacionamento (E-R)

Um diagrama de entidade-relacionamento 实体关系图 mostra a estrutura: cada entidade é um retângulo, cada relacionamento é uma linha, com a cardinalidade 基数 marcada em cada extremidade:

  • um-para-um (1:1).
  • um-para-muitos 一对多 (1:M) — cada Cliente tem muitos Pedidos; cada Pedido tem um Cliente.
  • muitos-para-muitos (M:N) — Estudantes frequentam muitos Cursos, e Cursos têm muitos Estudantes.
Um diagrama E-R com uma entidade STUDENT e uma entidade CLASS unidas por uma linha de relacionamento, pé-de-galinha de muitos na extremidade do estudante e uma barra de um na extremidade da classe
Um diagrama E-R: uma classe tem muitos estudantes
Símbolos de extremidade de linha 'crow's-foot' para um, muitos, um e apenas um, zero ou um, um ou muitos e zero ou muitos
Símbolos de pé-de-galinha para a cardinalidade de um relacionamento

Um relacionamento muitos-para-muitos não pode ser armazenado diretamente. Divida-o em dois relacionamentos um-para-muitos através de uma tabela de ligação 连接表 contendo as duas chaves estrangeiras:

ENROLMENT(StudentID, CourseID, EnrolmentDate)
Um relacionamento muitos-para-muitos entre STUDENT e COURSE armazenado como dois relacionamentos um-para-muitos através de uma tabela de ligação ENROLMENT contendo StudentID e CourseID
Uma tabela de ligação resolve um relacionamento muitos-para-muitos em dois relacionamentos um-para-muitos

Desenhando o diagrama E-R para um conjunto dado de tabelas. Cada tabela torna-se uma entidade. Um relacionamento existe sempre que uma tabela contenha uma chave estrangeira para outra; ele vai da tabela que contém a chave estrangeira (a extremidade muitos) para a tabela cuja chave primária ela é (a extremidade um). Uma tabela com duas chaves estrangeiras e nenhuma outra identidade geralmente é uma tabela de ligação resolvendo um relacionamento muitos-para-muitos. Roteie cada linha com o tipo de relacionamento.

Um diagrama E-R para um banco de dados de oficina com quatro entidades: CUSTOMER um-para-muitos DEVICE, DEVICE um-para-muitos REPAIR e TECHNICIAN um-para-muitos REPAIR, com notação de pé-de-galinha e chaves primárias e estrangeiras mostradas
Desenhando o diagrama a partir das tabelas: toda chave estrangeira é um relacionamento um-para-muitos, com o "muitos" na tabela que a contém

Exemplo resolvido. Uma oficina possui as tabelas CUSTOMER(CustomerID, Name, Phone), DEVICE(DeviceID, CustomerID, Type, Model), TECHNICIAN(TechnicianID, Name) e REPAIR(RepairID, DeviceID, TechnicianID, RepairDate, Cost). Identifique os relacionamentos e seus tipos.

DEVICE contém CustomerID, então CUSTOMER–DEVICE é um-para-muitos (um cliente, muitos dispositivos). REPAIR contém DeviceID, então DEVICE–REPAIR é um-para-muitos; também contém TechnicianID, então TECHNICIAN–REPAIR é um-para-muitos. Não há linha direta CUSTOMER–REPAIR: o link passa por DEVICE. Três linhas, três pés-de-galinha, todos nas extremidades REPAIR ou DEVICE.

Vocabulário Treinar
Inglês Chinês Pinyin
cardinality/ˌkɑːdɪˈnælɪti/ 基数 jī shù
one-to-many/wʌn tə ˈmeni/ 一对多 yī duì duō
link table/lɪŋk ˈteɪbl/ 连接表 lián jiē biǎo
8.1

Normalização

Normalização 规范化 organiza tabelas para reduzir redundância e inconsistência, passando pelas formas normais 范式 em ordem.

  • Primeira forma normal (1NF) — cada campo contém um único valor (atômico 原子), sem grupos repetidos, e possui uma chave primária.
  • Segunda forma normal (2NF) — em 1NF, e cada campo não-chave depende da totalidade da chave primária (importa apenas para uma chave composta).
  • Terceira forma normal (3NF) — em 2NF, e cada campo não-chave depende apenas da chave primária, não de outro campo não-chave (não há dependência transitiva 传递依赖).

Um design 3NF armazena cada fato uma única vez, assim anomalias de inserção/atualização/exclusão desaparecem. A contrapartida é mais tabelas e mais junções. Almeje 3NF.

Para produzir um design 3NF: encontre as entidades e seus atributos; escolha uma chave primária para cada; divida campos repetidos/não-atômicos (1NF); divida campos que dependem de parte de uma chave composta (2NF); divida campos que dependem transitivamente da chave (3NF); adicione chaves estrangeiras para os relacionamentos.

Normalização: uma tabela onde o nome e o telefone do cliente se repetem em cada pedido são divididos em uma tabela ORDER separada e uma tabela CUSTOMER, para que cada fato seja armazenado uma única vez
A normalização remove a redundância dividindo dados repetidos em sua própria tabela

Exemplo resolvido. A tabela ORDER(OrderID, CustomerID, CustomerName, ProductID, Quantity) tem a chave primária composta (OrderID, ProductID). Normalize-a para 3NF. Teste cada campo não-chave contra a chave. Quantity depende de ambos OrderID e ProductID, o que está correto. Mas CustomerID depende de OrderID sozinho - apenas parte da chave composta. Isso é uma dependência parcial, então a tabela não está em 2NF. Divida-a em ORDER_LINE(OrderID, ProductID, Quantity) e ORDER(OrderID, CustomerID, CustomerName). Agora teste 3NF: naquela nova tabela ORDER, CustomerName depende de CustomerID, que não é a chave - uma dependência transitiva. Divida novamente: ORDER(OrderID, CustomerID) e CUSTOMER(CustomerID, CustomerName). Nomeie a dependência que viola cada forma (parcial viola 2NF, transitiva viola 3NF); "ela tem dados repetidos" descreve o sintoma e não ganha pontos.

As três perguntas para fazer a qualquer tabela. Cada célula tem um único valor, sem grupo repetido? Se não, não está em 1NF. Se a chave for composta, todo campo não-chave depende da chave inteira? Se algum campo depender de parte dela, há uma dependência parcial 部分依赖 e a tabela não está em 2NF. Todo campo não-chave depende apenas da chave? Se um campo depender de outro campo não-chave, há uma dependência transitiva e a tabela não está em 3NF. Uma resposta "explique por que a tabela não está em 3NF" nomeia a dependência e os campos envolvidos.

Normalizando uma tabela de aluguel de carros em três passos: o grupo repetido de carros é removido para 1NF, os detalhes do carro que dependem de CarReg sozinho são movidos para uma tabela CAR para 2NF, e os detalhes do cliente que dependem de CustomerID são movidos para uma tabela CUSTOMER para 3NF
1NF remove o grupo repetido, 2NF a dependência parcial, 3NF a dependência transitiva

Exemplo resolvido. Uma loja de aluguel de carros registra cada aluguel como RENTAL(RentalID, RentalDate, CustomerID, CustomerName, CustomerPhone, CarReg, CarModel, DailyRate, Days), onde um aluguel pode incluir vários carros. Explique por que a tabela não está normalizada e produza um design 3NF.

Não em 1NF: os campos de carro CarReg, CarModel, DailyRate, Days formam um grupo repetido — um aluguel tem vários carros. Mova-os para RENTAL_CAR(RentalID, CarReg, CarModel, DailyRate, Days) com a chave composta (RentalID, CarReg). Não em 2NF: em RENTAL_CAR, CarModel e DailyRate dependem de CarReg sozinho — uma dependência parcial. Mova-os para CAR(CarReg, CarModel, DailyRate), deixando RENTAL_CAR(RentalID, CarReg, Days). Não em 3NF: em RENTAL, CustomerName e CustomerPhone dependem de CustomerID, um campo não-chave — uma dependência transitiva. Mova-os para CUSTOMER(CustomerID, CustomerName, CustomerPhone), deixando RENTAL(RentalID, RentalDate, CustomerID). O design 3NF é quatro tabelas — CUSTOMER, RENTAL, RENTAL_CAR, CAR — com CustomerID, RentalID e CarReg como chaves estrangeiras; sublinhe todas as chaves primárias.

Vocabulário Treinar
Inglês Chinês Pinyin
normalisation/ˌnɔːməlaɪˈzeɪʃn/ 规范化 guī fàn huà
normal forms/ˈnɔːml fɔːmz/ 范式 fàn shì
atomic/əˈtɒmɪk/ 原子 yuán zi
transitive dependency/ˈtrænsɪtɪv dɪˈpendənsi/ 传递依赖 chuán dì yī lài
partial dependency/ˈpɑːʃl dɪˈpendənsi/ 部分依赖 bù fèn yī lài
8.2

Sistema de Gerenciamento de Banco de Dados (DBMS)

Programa
Os candidatos devem ser capazes de: Notas e orientações
Demonstre compreensão das funcionalidades fornecidas por um Sistema de Gestão de Bases de Dados (DBMS) que abordam as questões de uma abordagem baseada em ficheiros Incluindo: • gestão de dados, incluindo manutenção de um dicionário de dados • modelação de dados • esquema lógico • integridade de dados • segurança de dados, incluindo procedimentos de cópia de segurança e uso de direitos de acesso para indivíduos/grupos de utilizadores
Demonstre compreensão de como ferramentas de software encontradas num DBMS são utilizadas na prática Incluindo o uso e propósito de: • interface de desenvolvedor • processador de consultas

Fonte: Programa Cambridge International

Um SGBD 数据库管理系统 gerencia o banco de dados centralmente. Funcionalidades que corrigem os limites baseados em arquivos:

  • dicionário de dados 数据字典 — uma descrição de cada tabela, campo, tipo e chave; programas consultam-no em vez de codificar a estrutura fixamente.
  • controle de redundância/consistência — cada fato armazenado uma única vez.
  • controle de acesso concorrente 并发访问 — bloqueios e transações permitem que muitos usuários trabalhem simultaneamente.
  • backup 备份 e recuperação; segurança e permissões por usuário.
  • regras de integridade — chaves, restrições de unicidade e intervalo, aplicadas centralmente.
  • transactions 事务 — um grupo de operações em que todas têm sucesso ou todas falham.
  • visualizações 视图 — tabelas virtuais que mostram a cada usuário "sua" fatia dos dados.
  • data management 数据管理 e data modelling 数据建模 — controlam como os dados são armazenados e definem sua estrutura como um logical schema 逻辑模式 (o projeto lógico, independente do armazenamento físico).
  • data integrity 数据完整性 e data security 数据安全 — impõem correção e controlam o acesso centralmente.
  • um query processor 查询处理器 executa consultas; uma developer interface 开发者接口 fornece ferramentas e APIs para construir aplicativos.

Suas ferramentas incluem um editor de dicionário de dados, um construtor de consultas, um construtor de formulários, um gerador de relatórios, gerenciamento de usuários e um editor SQL.

O que o dicionário de dados armazena (uma questão "listar três itens"): os nomes das tabelas; os nomes dos campos em cada tabela; o tipo de dado e o comprimento de cada campo; as chaves primárias e estrangeiras e os relacionamentos entre tabelas; regras de validação; índices; e quem pode acessar cada tabela. É metadado — dados sobre os dados — e o DBMS o usa para verificar cada consulta e cada alteração.

Como o DBMS mantém os dados seguros (uma questão "descrever dois métodos"): authentication 身份验证 — um nome de usuário e senha, ou biométrico, antes de qualquer acesso; access rights — cada usuário ou grupo tem permissão para ler, escrever ou excluir apenas certas tabelas ou campos, muitas vezes através de uma view; encryption dos dados armazenados e dos dados enviados a eles, para que um arquivo copiado seja ilegível; backups feitos regularmente, para que os dados possam ser restaurados após perda; e um log de transações que registra quem alterou o quê.

As duas ferramentas de software. A developer interface é o que um programador usa para construir o banco de dados e os aplicativos sobre ele: criar tabelas e definir chaves e validações, escrever consultas e SQL, e projetar formulários e relatórios, sem saber como os dados são armazenados fisicamente. O query processor recebe uma consulta (SQL de um programa ou uma consulta construída na interface), verifica-a contra o dicionário de dados, determina a maneira mais eficiente de executá-la, recupera os dados e retorna os resultados.

Logical schema. O DBMS mantém o projeto lógico (quais tabelas e campos existem e como se relacionam) separado do physical storage (arquivos, índices, blocos de disco). Os programas trabalham com o schema lógico, para que o armazenamento físico possa ser reorganizado sem alterar um único programa — esta é a independência de dados que a abordagem baseada em arquivos não possuía.

Um disco rígido com sua tampa removida, mostrando os pratos empilhados espelhados e o braço da cabeça de leitura/escrita repousando sobre eles
O armazenamento físico que o schema lógico esconde: pratos girantes e cabeça de leitura/escrita de um disco rígido
Explorar

Laboratório de serviço de banco de dados

Assista como um DBMS transforma uma consulta em acesso seguro e compartilhado aos dados.

Explorar

Laboratório de serviço de banco de dados

Assista como um DBMS transforma uma consulta em acesso seguro e compartilhado aos dados.

Vocabulário Treinar
Inglês Chinês Pinyin
integrity/ɪnˈteɡrɪti/ 完整性 wán zhěng xìng
relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ 关系数据库 guān xì shù jù kù
transactions/trænˈsækʃnz/ 事务 shì wù
backup/ˈbækʌp/ 备份 bèi fèn
views/vjuːz/ 视图 shì tú
data management/ˈdeɪtə ˈmænɪdʒmənt/ 数据管理 shù jù guǎn lǐ
data modelling/ˈdeɪtə ˈmɒdəlɪŋ/ 数据建模 shù jù jiàn mó
logical schema/ˈlɒdʒɪkl ˈskiːmə/ 逻辑模式 luó jí mó shì
data integrity/ˈdeɪtə ɪnˈteɡrɪti/ 数据完整性 shù jù wán zhěng xìng
data security/ˈdeɪtə sɪˈkjʊərɪti/ 数据安全 shù jù ān quán
query processor/ˈkwɪərɪ ˈprəʊsesə/ 查询处理器 chá xún chǔ lǐ qì
developer interface/dɪˈveləpə ˈɪntəfeɪs/ 开发者接口 kāi fā zhě jiē kǒu
authentication/ɔːˌθentɪˈkeɪʃn/ 身份验证 shēn fèn yàn zhèng
8.3

DDL e DML

Programa
Os candidatos devem ser capazes de: Notas e orientações
Demonstre compreensão de que o DBMS realiza toda a criação/modificação da estrutura da base de dados utilizando sua Linguagem de Definição de Dados (DDL)
Demonstre compreensão de que o DBMS realiza todas as consultas e manutenção de dados utilizando seu DML
Demonstre compreensão de que o padrão da indústria para ambos DDL e DML é a Structured Query Language (SQL) Compreenda uma declaração SQL dada
Compreenda declarações SQL dadas (DDL) e seja capaz de escrever simples declarações SQL (DDL) usando um subconjunto de declarações Criar uma base de dados (CREATE DATABASE) Criar uma definição de tabela (CREATE TABLE), incluindo a criação de atributos com tipos de dados adequados: • CHARACTER • VARCHAR(n) • BOOLEAN • INTEGER • REAL • DATE • TIME Alterar uma definição de tabela (ALTER TABLE) Adicionar uma chave primária a uma tabela (PRIMARY KEY (field)) Adicionar uma chave estrangeira a uma tabela (FOREIGN KEY (field) REFERENCES Table (Field))
Escreva um script SQL para consultar ou modificar dados (DML) armazenados em (no máximo duas) tabelas de base de dados Consultas incluindo SELECT... FROM, WHERE, ORDER BY, GROUP BY, INNER JOIN, SUM, COUNT, AVG
Manutenção de dados incluindo INSERT INTO, DELETE FROM, UPDATE

Fonte: Programa Cambridge International

SQL 结构化查询语言 (Structured Query Language) possui duas partes:

SQL se divide em DDL (constrói a estrutura) e DML (trabalha com os dados)
DDL constrói a estrutura do banco de dados; DML trabalha com os dados
  • Data Definition Language 数据定义语言 (DDL) — cria ou altera a estrutura (tabelas, chaves, restrições).
  • Data Manipulation Language 数据操纵语言 (DML) — trabalha com os dados (inserir, atualizar, excluir, query 查询).

Noções básicas de DDL

CREATE TABLE CUSTOMER (
  CustomerID INTEGER PRIMARY KEY,
  Name VARCHAR(50) NOT NULL,
  Phone VARCHAR(20)
);

Adicionar uma chave estrangeira:

CREATE TABLE ORDER (
  OrderID INTEGER PRIMARY KEY,
  CustomerID INTEGER,
  OrderDate DATE,
  FOREIGN KEY (CustomerID) REFERENCES CUSTOMER(CustomerID)
);

Modificar e excluir:

ALTER TABLE CUSTOMER ADD Email VARCHAR(100);
DROP TABLE CUSTOMER;

Tipos comuns: INTEGER, REAL, VARCHAR(n), CHAR(n) (também CHARACTER(n)), DATE, TIME, BOOLEAN, DECIMAL(p, s).

Noções básicas de DML

Consulta com SELECT:

Uma consulta SELECT retorna apenas as linhas que correspondem à sua condição
Uma consulta SELECT retorna apenas as linhas que correspondem à sua condição
SELECT Name, Phone
FROM CUSTOMER
WHERE City = 'London'
ORDER BY Name ASC;

SELECT lista campos, FROM nomeia a tabela, WHERE filtra linhas, ORDER BY ordena.

Um join 连接 combina duas tabelas usando um relacionamento de chave estrangeira:

SELECT C.Name, O.OrderDate
FROM CUSTOMER C INNER JOIN ORDER O
  ON C.CustomerID = O.CustomerID
WHERE O.OrderDate >= '2024-01-01';
Uma consulta SQL anotada linha por linha: SELECT nomeia os campos e uma coluna COUNT, FROM nomeia a primeira tabela com um alias, INNER JOIN ON conecta a segunda tabela através da chave estrangeira, WHERE mantém linhas correspondentes, GROUP BY faz uma linha por cliente, ORDER BY ordena o resultado
As partes de uma consulta, na ordem em que devem ser escritas

Funções agregadas 聚合函数 (COUNT, SUM, AVG, MIN, MAX) são frequentemente usadas com GROUP BY:

SELECT CustomerID, COUNT(*) AS NumOrders
FROM ORDER
GROUP BY CustomerID;

Inserir, atualizar, excluir:

INSERT INTO CUSTOMER (CustomerID, Name, Phone)
VALUES (101, 'Ada Lovelace', '020-1234-5678');

UPDATE CUSTOMER SET Phone = '020-9999-0000' WHERE CustomerID = 101;

DELETE FROM CUSTOMER WHERE CustomerID = 101;

Sempre coloque uma cláusula WHERE em UPDATE e DELETE, ou a alteração atingirá todas as linhas.

Dicas para SQL de exame

  • use exatamente os nomes de tabela e campo da questão.
  • cite strings com aspas simples ('Smith'); não cite números.
  • comparações: =, <, >, <=, >=, <>.
  • LIKE 'A%' corresponde a tudo que começa com A (% = qualquer string, _ = um caractere); IN (1,2,3); BETWEEN 10 AND 20.
  • combine condições com AND / OR / NOT, e termine cada statement com ponto e vírgula.

O padrão DDL que o exame quer. Cada CREATE TABLE nomeia cada campo com seu tipo, marca a chave primária e declara cada chave estrangeira com a tabela que ela referencia; uma chave composta é declarada em sua própria linha:

CREATE TABLE RENTAL_CAR (
  RentalID INTEGER,
  CarReg VARCHAR(8),
  Days INTEGER,
  PRIMARY KEY (RentalID, CarReg),
  FOREIGN KEY (RentalID) REFERENCES RENTAL(RentalID),
  FOREIGN KEY (CarReg) REFERENCES CAR(CarReg)
);

Exemplo resolvido. Usando CUSTOMER(CustomerID, Name, Phone) e DEVICE(DeviceID, CustomerID, Type, Model), escreva scripts SQL para: (a) listar o nome e o número de telefone de todo cliente que possui um dispositivo do tipo 'tablet', em ordem alfabética de nome; (b) contar os dispositivos de cada tipo; (c) registrar que o cliente 17 agora tem o número de telefone '0771 234 5678'; (d) adicionar um novo dispositivo, ID 305, um 'laptop' do modelo 'X1' pertencente ao cliente 17.

(a)

SELECT CUSTOMER.Name, CUSTOMER.Phone
FROM CUSTOMER INNER JOIN DEVICE
  ON CUSTOMER.CustomerID = DEVICE.CustomerID
WHERE DEVICE.Type = 'tablet'
ORDER BY CUSTOMER.Name ASC;

(b)

SELECT Type, COUNT(DeviceID) AS NumberOfDevices
FROM DEVICE
GROUP BY Type;

(c) UPDATE CUSTOMER SET Phone = '0771 234 5678' WHERE CustomerID = 17; (d) INSERT INTO DEVICE (DeviceID, CustomerID, Type, Model) VALUES (305, 17, 'laptop', 'X1');

Pontuação é dada por cláusula — os campos, as tabelas, a condição de join, o WHERE, o ORDER BY — então um script com uma cláusula errada ainda pontua o resto. Escreva Table.Field sempre que duas tabelas estiverem envolvidas.

Exemplo resolvido. Explique o que este script faz: SELECT T.Name, SUM(R.Cost) AS Total FROM TECHNICIAN T INNER JOIN REPAIR R ON T.TechnicianID = R.TechnicianID GROUP BY T.Name;

Ele输出每个技术人员姓名及其执行的维修总成本,每行一个技术人员:两个表通过TechnicianID连接,行按姓名分组,每组中的成本相加。当被问及脚本做什么时,描述结果,而不是语法。

Explorar

Unir duas tabelas com INNER JOIN

Um join combina linhas onde a chave estrangeira é igual à chave primária — aqui Orders.CustomerID = Customer.CustomerID — e une cada par correspondente em uma linha mais larga.

Explorar

SELECT … WHERE

Passe por uma consulta: WHERE mantém as linhas que correspondem, então SELECT escolhe as colunas que você pediu.

Vocabulário Treinar
Inglês Chinês Pinyin
flat files/flæt faɪlz/ 平面文件 píng miàn wén jiàn
data redundancy/ˈdeɪtə rɪˈdʌndənsi/ 数据冗余 shù jù rǒng yú
data inconsistency/ˈdeɪtə ˌɪnkənˈsɪstənsi/ 数据不一致 shù jù bù yī zhì
field/fiːld/ 字段 zì duàn
query/ˈkwɪərɪ/ 查询 chá xún
SQL/ˌes kjuː ˈel/ 结构化查询语言 jié gòu huà chá xún yǔ yán
primary key/ˈpraɪməri kiː/ 主键 zhǔ jiàn
foreign key/ˈfɒrən kiː/ 外键 wài jiàn
join/dʒɔɪn/ 连接 lián jiē
Data Definition Language/ˈdeɪtə ˌdefɪˈnɪʃn ˈlæŋɡwɪdʒ/ 数据定义语言 shù jù dìng yì yǔ yán
Data Manipulation Language/ˈdeɪtə məˌnɪpjʊˈleɪʃn ˈlæŋɡwɪdʒ/ 数据操纵语言 shù jù cāo zòng yǔ yán
aggregate functions/ˈæɡrɪɡeɪt ˈfʌŋkʃnz/ 聚合函数 jù hé hán shù
Assistir aula
8.3

Definições aceitas pelo examinador

Uma questão de definição é avaliada contra wording fixo. Aprenda estas exatamente, e dê apenas uma resposta.

Termo Definição
entity algo sobre o qual dados são armazenados — uma pessoa, objeto ou evento — que se torna uma tabela em um banco de dados relacional
attribute um item de dado sobre uma entidade (uma coluna da tabela)
tuple uma linha de uma tabela: uma instância da entidade
primary key um atributo, ou combinação de atributos, que identifica unicamente cada registro em uma tabela
foreign key um atributo em uma tabela cujo valor corresponde a uma chave primária em outra tabela, usado para ligar as duas
candidate key qualquer atributo (ou combinação) que poderia ser escolhido como chave primária
secondary key um atributo não-primário que é indexado para que a tabela possa ser pesquisada ou ordenada rapidamente nele
composite key uma chave primária feita de dois ou mais atributos juntos
referential integrity todo valor de chave estrangeira deve corresponder a um valor de chave primária existente na tabela a que se refere
first normal form uma tabela em que todo atributo é atômico, não há grupos repetidos e existe uma chave primária
second normal form em 1NF, e todo atributo não-chave depende de toda a chave primária (nenhuma dependência parcial)
third normal form em 2NF, e nenhum atributo não-chave depende de outro atributo não-chave (nenhuma dependência transitiva)
data dictionary os metadados que um DBMS mantém sobre a estrutura do banco de dados: tabelas, campos, tipos, chaves, relacionamentos, validação
DDL / DML a linguagem usada para definir ou alterar a estrutura de um banco de dados / a linguagem usada para consultar e manter os dados nele
Vocabulário Treinar
Inglês Chinês Pinyin
entity/ˈentɪti/ 实体 shí tǐ
record/ˈrekɔːd/ 记录 jì lù
tuple/ˈtuːpl/ 元组 yuán zǔ
attribute/ˈætrɪbjuːt/ 属性 shǔ xìng
composite key/ˈkɒmpəzɪt kiː/ 复合键 fù hé jiàn
candidate key/ˈkændɪdeɪt kiː/ 候选键 hòu xuǎn jiàn
secondary key/ˈsekəndəri kiː/ 次键 cì jiàn
indexing/ˈɪndeksɪŋ/ 索引 suǒ yǐn
referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ 参照完整性 cān zhào wán zhěng xìng
entity-relationship diagram/ˈentɪti rɪˈleɪʃənʃɪp ˈdaɪəɡræm/ 实体关系图 shí tǐ guān xì tú
data dictionary/ˈdeɪtə ˈdɪkʃənəri/ 数据字典 shù jù zì diǎn
concurrent access/kənˈkʌrənt ˈækses/ 并发访问 bìng fā fǎng wèn
8.3

Dicas de prova

  • Defina os termos exatamente: entity, attribute, primary key, foreign key, e os tipos de relacionamento (1:1, 1:muitos, muitos:muitos).
  • Dê uma razão em cada forma normal: 1NF (sem grupos repetidos), 2NF (sem dependência parcial), 3NF (sem dependência não-chave) — e nomeie os campos envolvidos.
  • Explique o que um DBMS fornece (independência de dados, segurança, integridade, acesso simultâneo, um dicionário de dados, uma interface de desenvolvedor, um processador de consultas).
  • Distinga DDL (definir a estrutura) de DML (consultar e alterar os dados), e escreva cláusulas SQL uma por uma: SELECT, FROM, INNER JOIN … ON, WHERE, GROUP BY, ORDER BY.
  • Para desenhar um diagrama E-R a partir de tabelas, encontre primeiro cada chave estrangeira: toda chave estrangeira representa um relacionamento de um-para-muitos, com o "muitos" na tabela que a contém.

Erros comuns

  • Desenhar um relacionamento de muitos-para-muitos diretamente. Ele deve ser dividido em dois relacionamentos de um-para-muitos através de uma tabela de ligação contendo ambas as chaves estrangeiras.
  • Explicando "não em 3NF" como "os dados estão repetidos". Nomeie a dependência (parcial ou transitiva) e os campos envolvidos.
  • Aspas duplas em torno de strings no SQL, ou aspas em torno de números. Strings levam 'single quotes'; números não levam nada.
  • Deixar de fora a condição ON depois de INNER JOIN. Sem ela, as duas tabelas não estão ligadas.
  • Colocar um campo comum ao lado de COUNT ou SUM em um SELECT sem um GROUP BY.
  • UPDATE ou DELETE sem um WHERE. Ela altera ou remove todas as linhas da tabela.

Aulas interativas sobre este tópico

Passe por ele passo a passo, com exercícios de verificação instantânea.

Provas Anteriores

Mais tópicos em Ciência da Computação do A-Level

Entrar ou criar conta

IGCSE, A-Level & AP