Why databases and the relational model · Por que bancos de dados e o modelo relacional
| English | Português |
|---|---|
| table/ˈteɪbl/ | tabela |
| relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ | banco de dados relacional |
| flat files/flæt faɪlz/ | arquivos planos |
| data redundancy/ˈdeɪtə rɪˈdʌndənsi/ | redundância de dados |
| data inconsistency/ˈdeɪtə ˌɪnkənˈsɪstənsi/ | inconsistência de dados |
| integrity/ɪnˈteɡrɪti/ | integridade |
| field/fiːld/ | campo |
| entity/ˈentɪti/ | entidade |
| record/ˈrekɔːd/ | registrar |
| tuple/ˈtuːpl/ | tupla |
| attribute/ˈætrɪbjuːt/ | atributo |
| primary key/ˈpraɪməri kiː/ | chave primária |
| composite key/ˈkɒmpəzɪt kiː/ | chave composta |
| candidate key/ˈkændɪdeɪt kiː/ | chave candidata |
| secondary key/ˈsekəndəri kiː/ | chave secundária |
| indexing/ˈɪndeksɪŋ/ | indexação |
| foreign key/ˈfɒrən kiː/ | chave estrangeira |
| referential integrity/ˌrefəˈrenʃl ɪnˈteɡrɪti/ | integridade referencial |
| one-to-many/wʌn tə ˈmeni/ | um-para-muitos |
| many-to-many/ˈmeni tə ˈmeni/ | muitos-para-muitos |
The paper IBM did not want
- In 1970 an IBM researcher called Edgar Codd published a twelve-page paper proposing that data be stored in simple tables, linked by shared values, and asked for in a language that said what you wanted rather than where it was on the disk.
- IBM already sold a database that stored data as trees tied to the file layout, so it ignored him for years. Every program written against those files had to be rewritten whenever the layout changed.
- By the 1980s every bank, airline and government department was moving to Codd's tables. Half a century later they still run on them.
- This lesson is the problems of the file-based approach, how a relational database 关系数据库 solves them, and the words you must use exactly.
O documento que a IBM não queria publicar
- Em 1970, um pesquisador da IBM chamado Edgar Codd publicou um documento de doze páginas propondo que os dados fossem armazenados em tabelas simples, ligadas por valores partilhados, e pedidas numa linguagem que dissesse o que você queria em vez de onde estava no disco.
- A IBM já vendia uma base de dados que armazenava dados como árvores ligadas ao layout de ficheiros, assim o ignorou durante anos. Cada programa escrito contra esses ficheiros tinha de ser reescrito sempre que o layout mudava.
- Na década de 1980, todos os bancos, companhias aéreas e departamentos governamentais estavam a migrar para as tabelas do Codd. Meio século depois, ainda funcionam sobre elas.
- Esta lição trata dos problemas da abordagem baseada em ficheiros, como uma base de dados relacional 关系数据库 os resolve, e das palavras que deve usar exatamente.
The file-based approach
- Before databases, each program kept its own flat files 平面文件: the sales program had a customer file, the accounts program had another, the delivery program a third.
- Each file had a fixed layout that the program's code depended on, and nothing outside the program knew what was in it.
- It works for one small program. The trouble starts when the second program needs the same data.
Three programs, three copies of the customer
A abordagem baseada em ficheiros
- Antes das bases de dados, cada programa mantinha os seus próprios ficheiros planos 平面文件: o programa de vendas tinha um ficheiro de clientes, o programa de contas tinha outro, o programa de entregas tinha um terceiro.
- Cada ficheiro tinha um layout fixo dependente do código do programa, e nada fora do programa sabia o que estava nele.
- Funciona para um único programa pequeno. Os problemas começam quando o segundo programa precisa dos mesmos dados.

Três programas, três cópias do cliente
The limitations
- Data redundancy 数据冗余: the same data, a customer's address, is held in several files, wasting storage and effort.
- Data inconsistency 数据不一致: the copies are updated separately, so they drift apart and nobody knows which is right.
- Data dependence: programs are tied to the file format, so a change to the layout means rewriting every program that uses the file.
- Integrity 完整性 is hard to enforce, data is hard to share safely, searching across files is slow, and security cannot be set per field.
As limitações
- Redundância de dados 数据冗余: os mesmos dados, como um endereço de cliente, estão guardados em vários ficheiros, desperdiçando armazenamento e esforço.
- Inconsistência de dados 数据不一致: as cópias são atualizadas separadamente, assim divergem e ninguém sabe qual está correta.
- Dependência de dados: os programas estão ligados ao formato do ficheiro, assim uma mudança no layout significa reescrever todos os programas que usam o ficheiro.
- A integridade 完整性 é difícil de garantir, os dados são difíceis de partilhar com segurança, a pesquisa através de ficheiros é lenta e a segurança não pode ser definida por campo.
Storing a customer's address in several separate files leads to: · Armazenar o endereço de um cliente em vários arquivos separados leva a:
The same data held in many places (redundancy) can be updated separately and become inconsistent. · Os mesmos dados armazenados em muitos lugares (redundância) podem ser atualizados separadamente e se tornar inconsistentes.
In a flat-file system the same data is often duplicated across files, which can become inconsistent when only one copy is updated. · Em um sistema de arquivo plano, os mesmos dados são frequentemente duplicados entre arquivos, o que pode levar a inconsistências quando apenas uma cópia é atualizada.
That redundancy and the resulting inconsistency is the core problem the relational model solves. · Essa redundância e a inconsistência resultante são o problema central que o modelo relacional resolve.
Which are limitations of the file-based approach? Select all · todos that apply. · Quais são as limitações da abordagem baseada em arquivos? Selecione todas as opções aplicáveis.
Redundancy, inconsistency and data dependence are the three named limitations. Tables and joins belong to the relational approach that replaces it. · Redundância, inconsistência e dependência de dados são as três limitações nomeadas. Tabelas e joins pertencem à abordagem relacional que a substitui.
How a relational database answers them
- A relational database stores the data in tables 表 managed by one piece of software, the DBMS, which every program uses.
- Each fact is stored once, so redundancy and inconsistency disappear: an address is changed in one place and every program sees the change.
- Programs ask the DBMS for data by name, so the storage can change without the programs changing: data independence.
- Integrity rules, access rights and backups are enforced centrally, and any table can be searched or joined with any other.
One copy of the data, one gatekeeper
Como uma base de dados relacional responde a estas limitações
- Uma base de dados relacional armazena os dados em tabelas 表 geridas por um único software, o DBMS, que todos os programas utilizam.
- Cada facto é armazenado uma única vez, eliminando a redundância e a inconsistência: um endereço é alterado num lugar e todos os programas veem a alteração.
- Os programas pedem dados ao DBMS pelo seu nome, assim o armazenamento pode mudar sem que os programas se alterem: independência de dados.
- Regras de integridade, direitos de acesso e cópias de segurança são aplicadas centralmente, e qualquer tabela pode ser pesquisada ou ligada a outra.

Uma única cópia dos dados, um único guardião
How does a relational database remove data inconsistency? · Como um banco de dados relacional remove a inconsistência de dados?
One copy, one update, no drift. The DBMS gives every program the same current value. · Uma cópia, uma atualização, sem divergência. O DBMS fornece a cada programa o mesmo valor atual.
The vocabulary: tables, rows and columns
- A table (a relation) is a grid of rows and columns, one table for each type of entity 实体, a thing about which data is stored:
CUSTOMER,ORDER,PRODUCT. - A record 记录 is one row, one instance of the entity; the formal word is tuple 元组.
- A field 字段 is one column, one piece of information about each record; the formal word is attribute 属性.
Rows are records, columns are fields, and one column reaches into the other table
O vocabulário: tabelas, linhas e colunas
- Uma tabela (uma relação) é uma grelha de linhas e colunas, uma tabela para cada tipo de entidade 实体, uma coisa sobre a qual os dados são armazenados:
CUSTOMER,ORDER,PRODUCT. - Um registo 记录 é uma linha, uma instância da entidade; a palavra formal é tuplo 元组.
- Um campo 字段 é uma coluna, uma informação sobre cada registo; a palavra formal é atributo 属性.

Linhas são registos, colunas são campos, e uma coluna atinge a outra tabela
Read a relational table with SELECT · Leia uma tabela relacional com SELECT
A relational table is just rows (records) and columns (fields). WHERE keeps the rows that match a condition; SELECT then keeps only the columns you asked for. · 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.
The vocabulary: keys
- A primary key 主键 is a field, or combination of fields, that uniquely identifies each record; it is never null and never duplicated. A composite key 复合键 is a primary key made of two or more fields.
- A candidate key 候选键 is any field or combination that could serve as the primary key. A secondary key 次键 is a non-primary field that is indexed for fast searching; indexing 索引 builds an index on a field so look-ups and joins run faster.
- A foreign key 外键 is a field whose value matches the primary key of another table, linking the two. In shorthand, the primary key is underlined and the foreign key noted:
O vocabulário: chaves
- Uma chave primária 主键 é um campo, ou combinação de campos, que identifica unicamente cada registo; nunca é nula e nunca é duplicada. Uma chave composta 复合键 é uma chave primária feita de dois ou mais campos.
- Uma chave candidata 候选键 é qualquer campo ou combinação que poderia servir como chave primária. Uma chave secundária 次键 é um campo não primário que é indexado para pesquisa rápida; indexação 索引 cria um índice num campo para que as consultas e ligações sejam mais rápidas.
- Uma chave estrangeira 外键 é um campo cujo valor corresponde à chave primária de outra tabela, ligando as duas. Em resumo, a chave primária é sublinhada e a chave estrangeira assinalada:
CUSTOMER(CustomerID, Name, Phone)
ORDER(OrderID, CustomerID, OrderDate) -- CustomerID is a foreign key → CUSTOMER
A primary key: · Uma chave primária:
The primary key uniquely identifies each row. A foreign key is the one that links to another table. · A chave primária identifica unicamente cada linha. Uma chave estrangeira é a que linka para outra tabela.
Match each kind of key to what it is. · Associe cada tipo de chave ao seu significado.
The primary key identifies a row; a foreign key links to another table; composite = several fields together; candidate = a possible primary key. · A chave primária identifica uma linha; uma chave estrangeira linka para outra tabela; composta = vários campos juntos; candidata = uma possível chave primária.
A field whose value matches the primary key of another table is a ______ key. · Um campo cujo valor corresponde à chave primária de outra tabela é uma chave ______.
The foreign key is what creates the relationship between two tables. · A chave estrangeira é o que cria o relacionamento entre duas tabelas.
Worked example: name the parts of a library database
- A library records its books, its members and each loan. Identify the entities, a primary key for each, and the foreign keys.
- Entities:
BOOK,MEMBER,LOAN. Primary keys:BookID,MemberID,LoanID, each chosen because it is unique for every record and never blank; a title or a name would not do, since two books can share a title. LOAN(LoanID, BookID, MemberID, DateOut, DateDue):BookIDandMemberIDare foreign keys, each matching the primary key of its own table. A member's phone number belongs inMEMBER, not in every loan.
Exemplo resolvido: nomeie as partes de uma base de dados de biblioteca
- Uma biblioteca regista os seus livros, os seus membros e cada empréstimo. Identifique as entidades, uma chave primária para cada uma, e as chaves estrangeiras.
- Entidades:
BOOK,MEMBER,LOAN. Chaves primárias:BookID,MemberID,LoanID, cada uma escolhida porque é única para cada registo e nunca está em branco; um título ou um nome não servem, pois dois livros podempartilhar um título. LOAN(LoanID, BookID, MemberID, DateOut, DateDue):BookIDeMemberIDsão chaves estrangeiras, cada uma correspondendo à chave primária da sua própria tabela. O número de telemóvel de um membro pertence aMEMBER, não a cada empréstimo.
In LOAN(LoanID, BookID, MemberID, DateOut), BookID and MemberID are ____ keys. · Em LOAN(LoanID, BookID, MemberID, DateOut), BookID e MemberID são chaves ____.
Each matches the primary key of another table, BOOK and MEMBER, and links the loan to them. · Cada uma corresponde à chave primária de outra tabela, BOOK e MEMBER, e liga o empréstimo a elas.
Relationships and referential integrity
- A relationship links two entities. One-to-one: each member has one library card. One-to-many 一对多: one member has many loans; each loan belongs to one member. Many-to-many 多对多: a book has many authors and an author writes many books.
- Referential integrity 参照完整性 means every foreign-key value must match an existing primary key in the table it refers to: no loan for a member who does not exist, no orphan records.
- The DBMS enforces it: it refuses an insert with an unknown foreign key, and refuses to delete a record that other records still refer to.
Relações e integridade referencial
- Uma relação liga duas entidades. Um-para-um: cada membro tem um cartão de biblioteca. Um-para-muitos 一对多: um membro tem muitos empréstimos; cada empréstimo pertence a um membro. Muitos-para-muitos 多对多: um livro tem muitos autores e um autor escreve muitos livros.
- A integridade referencial 参照完整性 significa que todo o valor de uma chave estrangeira deve corresponder a uma chave primária existente na tabela a que se refere: nenhum empréstimo para um membro que não exista, nenhum registo órfão.
- O DBMS aplica-a: recusa uma inserção com uma chave estrangeira desconhecida e recusa apagar um registo que outros registos ainda referenciam.
Referential integrity ensures that: · A integridade referencial garante que:
It prevents orphan records — you cannot reference a primary key that does not exist. · Evita registros órfãos — você não pode referenciar uma chave primária que não existe.
Match each relationship to its type. · Associe cada relacionamento ao seu tipo.
Count how many of each entity can be linked to one of the other. Many-to-many needs a link table to store. · Conte quantas entidades de um lado podem ser ligadas a uma do outro. Muitos-para-muitos precisa de uma tabela de ligação para armazenar.
Worked example: what referential integrity stops
- A customer with three outstanding orders is deleted from the
CUSTOMERtable. Explain how referential integrity applies. - Each order's
CustomerIDis a foreign key that must match an existing customer. Deleting the customer would leave three orders pointing at a record that no longer exists: orphan records. - The DBMS therefore refuses the deletion until the orders are deleted or reassigned, or, if set up to cascade, deletes the orders too. Either way no order ever refers to a customer who is not there.
- Say what the rule is, what would break it, and what the DBMS does.
Exemplo resolvido: o que a integridade referencial impede
- Um cliente com três pedidos pendentes é apagado da tabela
CUSTOMER. Explique como a integridade referencial se aplica. - A
CustomerIDde cada pedido é uma chave estrangeira que deve corresponder a um cliente existente. Apagar o cliente deixaria três pedidos a apontar para um registo que já não existe: registos órfãos. - O DBMS, portanto, recusa a eliminação até que os pedidos sejam apagados ou reassignados, ou, se configurado para cascata, apaga também os pedidos. De qualquer forma, nenhum pedido referencia um cliente que não esteja lá.
- Diga qual é a regra, o que a quebraria e o que o DBMS faz.
Referential integrity allows a customer to be deleted while orders in another table still refer to that customer. · A integridade referencial permite excluir um cliente enquanto pedidos em outra tabela ainda se referem a esse cliente.
That would create orphan records. The DBMS refuses the deletion, or cascades it to the orders, so every foreign key keeps pointing at an existing record. · Isso criaria registros órfãos. O DBMS recusa a exclusão ou a propaga aos pedidos, mantendo toda chave estrangeira apontando para um registro existente.
Definitions the examiner accepts
| Term | Definition |
|---|---|
| entity | a thing about which data is stored, represented by one table |
| attribute | one item of data about an entity, a column |
| tuple | one row of a table, one record |
| primary key | an attribute or combination of attributes that uniquely identifies each tuple |
| candidate key | an attribute or combination that could be chosen as the primary key |
| secondary key | an indexed attribute used to search the table quickly |
| foreign key | an attribute in one table that is the primary key of another, forming the link |
| referential integrity | every foreign-key value refers to an existing primary key |
Definições aceitas pelo avaliador
| Termo | Definição |
|---|---|
| entidade | uma coisa sobre a qual os dados são armazenados, representada por uma tabela |
| atributo | um item de dados sobre uma entidade, uma coluna |
| tuplo | uma linha de uma tabela, um registo |
| chave primária | um atributo ou combinação de atributos que identifica unicamente cada tuplo |
| chave candidata | um atributo ou combinação que poderia ser escolhido como chave primária |
| chave secundária | um atributo indexado usado para pesquisar a tabela rapidamente |
| chave estrangeira | um atributo numa tabela que é a chave primária de outra, formando a ligação |
| integridade referencial | todo o valor de uma chave estrangeira refere-se a uma chave primária existente |
Marks that slip away
- A tuple is a row, an attribute is a column. Swapping them costs both marks.
- "Unique" alone does not define a primary key; it identifies each record and is never null.
- A foreign key may repeat: one customer, many orders. It is the primary key that may not.
- A secondary key is for fast searching, not for identification. Do not call it "a second primary key".
Marcas que escapam
- Um tuplo é uma linha, um atributo é uma coluna. Invertê-los custa ambas as notas.
- "Único" sozinho não define uma chave primária; ele identifica cada registo e nunca é nulo.
- Uma chave estrangeira pode repetir: um cliente, muitos pedidos. É a chave primária que não pode.
- Uma chave secundária é para pesquisa rápida, não para identificação. Não a chame de "segunda chave primária".
You've got it
- the file-based approach suffers redundancy, inconsistency and data dependence, with weak integrity, sharing, searching and security
- a relational database stores each fact once in tables managed by one DBMS, so programs are independent of the storage and rules are enforced centrally
- entity → table · tuple → record, row · attribute → field, column · primary key identifies, foreign key links, candidate could identify, secondary is indexed for searching
- referential integrity: every foreign key matches an existing primary key, so no orphan records
Entendeu?
- a abordagem baseada em ficheiros sofre de redundância, inconsistência e dependência de dados, com fraca integridade, partilha, pesquisa e segurança
- uma base de dados relacional armazena cada fato uma única vez em tabelas gerenciadas por um único SGBD, assim os programas são independentes do armazenamento e as regras são aplicadas centralmente
- entidade → tabela · tupla → registro, linha · atributo → campo, coluna · chave primária identifica, chave estrangeira vincula, candidata poderia identificar, secundária é indexada para busca
- integridade referencial: toda chave estrangeira corresponde a uma chave primária existente, evitando registros órfãos