Visão geral do banco de dados_07

O processo de execução de SELECT

#方式1:
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件 AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...

#方式2:
SELECT ...,....,...
FROM ...
JOIN ... ON 多表的连接条件
JOIN ... ON ...
WHERE 不包含组函数的过滤条件 AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC LIMIT ...,...

#其中:
1from:从哪些表中筛选
2on:关联多表查询时,去除笛卡尔积
3where:从表中筛选的条件
4group by:分组依据
5having:在统计结果中再次筛选
6order by:排序
7limit:分页

Tabelas e relacionamentos entre tabelas

Método de design de banco de dados: método de tentativa e erro, método de normalização e método CAD
Ferramenta de design de banco de dados: powerdesigner

No desenvolvimento real, um projeto geralmente envolve muitos aspectos dos dados. como produtos e categorias

Número de produto Nome do Produto preço nome da classificação nota
1 Uau haha 2.34 bebidas 3
2 Moutai 456,78 bebidas 3
3 Java da entrada ao abandono 12h45 livros 2

Redundância de dados e chaves estrangeiras

Redundância de dados: informações de categoria duplicadas

Problemas causados ​​pela redundância de dados: desperdício de espaço, adição de exceções, exclusão de exceções e modificação de exceções

Solução: introduzir restrições de chave estrangeira

tabela de produtos

Número de produto Nome do Produto preço da mercadoria número da categoria
1 Uau haha 2.34 1
2 Moutai 456,78 1
3 Java da entrada ao abandono 12h45 2

Lista de categorias

número da categoria nome da classificação nota
1 bebidas 3
2 livros 2

Reduza a redundância de dados introduzindo novas tabelas e usando restrições de chave estrangeira para garantir a racionalidade dos valores

create table tb_catalog(
id bigint primary key auto_increment, -- 实体完整性
title varchar(32) not null
) comment '类别表';
create table tb_product(
id bigint primary key auto_increment comment '商品标号',
name varchar(32) not null,
price numeric(8,2) default 0,
-- 引入额外的列用于表示商品所属于的类别
catalog_id bigint, -- 外键列,允许为null
-- 外键表示该列的允许取的值必须在tb_catalog的id列中出现
foreign key(catalog_id) references tb_catalog(id)
) comment '商品表';
  • O id na tabela de categorias é a chave primária, e as colunas na tabela de produtos referem-se à chave primária na tabela de categorias, então a tabela de categorias gerais é chamada de tabela principal, a tabela de produtos é chamada de tabela escrava e a catalog_id na tabela de produtos é chamada de tabela estrangeira.
  • A relação chave primária-estrangeira descrita pela chave primária da tabela principal e a chave estrangeira na tabela secundária apresenta uma relação um-para-muitos
    • Uma categoria tem vários produtos
    • Um produto só pode pertencer a uma categoria
  • Innodb suporta chaves estrangeiras e transações no MySQL, mas MyISAM não suporta chaves estrangeiras e transações
  • No desenvolvimento específico, a fim de melhorar o desempenho, as restrições de chave estrangeira serão excluídas propositalmente e a racionalidade dos dados será controlada por meio de código

Características das chaves estrangeiras

  • O valor da chave estrangeira na tabela slave é uma referência ao valor da chave primária correspondente na tabela master
  • O tipo de dados da chave estrangeira na tabela secundária deve ser consistente com o tipo de dados da chave primária na tabela principal

gramática básica

O objetivo de introduzir chaves estrangeiras é garantir a integridade referencial dos dados
Crie a sintaxe da chave estrangeira 1:

create table tb_product(
id bigint primary key auto_increment comment '商品标号',
-- 引入额外的列用于表示商品所属于的类别
catalog_id bigint, -- 外键列,允许为null
-- 外键表示该列的允许取的值必须在tb_catalog的id列中出现
foreign key(catalog_id) references tb_catalog(id)
) comment '商品表';

Criar chave estrangeira Sintaxe 2:

create table tb_product(
id bigint primary key auto_increment comment '商品标号',
catalog_id bigint -- 外键列,允许为null。是否允许为空取决于业务规则
)
-- alter table 从表名称 add [constraint fk_catalog外键约束名称] foreign key(从表中的外
键列名) references 主表名称(主表中的主键列名称)
alter table tb_product add constraint fk_catalog foreign key(catalog_id)
references tb_catalog(id);

Sintaxe para descartar uma restrição de chave estrangeira:

-- alter table 从表名称 drop foreign key 外键约束名称;
alter table tb_product drop foreign key fk_catalog;

Precisa lembrar duas ordens de consulta SELECT:

1. A ordem das palavras-chave não pode ser invertida: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ...ORDER BY ... LIMIT...
2. A ordem de execução da instrução SELECT:

SELECT DISTINCT player_id, player_name, count(*) as num # 顺序 5
FROM player JOIN team ON player.team_id = team.team_id # 顺序 1
WHERE height > 1.80 # 顺序 2
GROUP BY player.team_id # 顺序 3
HAVING num > 2 # 顺序 4
ORDER BY num DESC # 顺序 6
LIMIT 2 # 顺序 7

Princípio de execução SQL

SELECT executa a etapa FROM primeiro. Nesta fase, se for uma consulta conjunta de várias tabelas, seguirá os seguintes passos:

  1. Primeiramente, o produto cartesiano é obtido por meio de CROSS JOIN, que equivale a obtenção da tabela virtual vt (tabela virtual) 1-1;
  2. Filtre por ON e filtre com base na tabela virtual vt1-1 para obter a tabela virtual vt1-2;
  3. Adicione linha externa. Se usarmos junção esquerda, junção direita ou junção completa, isso envolverá linhas externas, ou seja, adicionar linhas externas com base na tabela virtual vt1-2 para obter a tabela virtual vt1-3.

Obviamente, se estivermos operando mais de duas mesas, as etapas acima serão repetidas até que todas as mesas sejam processadas. Esse processo produz nossos dados brutos.

Em seguida, entre no terceiro e quarto passos, ou seja, os estágios GROUP e HAVING. Nesta etapa, o agrupamento e a filtragem de agrupamento são realmente realizados com base na tabela virtual vt2, e as tabelas virtuais intermediárias vt3 e vt4 são obtidas.

Terminada a parte da filtragem condicional, podemos filtrar os campos extraídos da tabela, ou seja, entrar nas etapas SELECT e DISTINCT.

  • Primeiro, os campos desejados serão extraídos no estágio SELECT e, em seguida, as linhas duplicadas serão filtradas no estágio DISTINCT para obter as tabelas virtuais intermediárias vt5-1 e vt5-2, respectivamente.

Após extrairmos os dados do campo desejado, podemos ordenar de acordo com o campo especificado, que é a etapa ORDER BY, e obter a tabela virtual vt6.

Por fim, com base em vt6, retira-se o registro da linha especificada, ou seja, a etapa LIMIT, e obtém-se o resultado final, que corresponde à tabela virtual vt7.

Obviamente, quando escrevemos a instrução SELECT, nem todas as palavras-chave podem existir e os estágios correspondentes serão omitidos.

Ao mesmo tempo, como o SQL é uma linguagem de consulta estruturada semelhante ao inglês, você também deve prestar atenção à ordem das palavras-chave correspondentes ao escrever a instrução SELECT.O chamado princípio de operação subjacente é a ordem de execução.

Forma Normal NF

Ao projetar um banco de dados relacional, siga diferentes requisitos de especificação para projetar um banco de dados relacional razoável. Esses diferentes requisitos de especificação são chamados de paradigmas diferentes e vários paradigmas apresentam subpadrões. Quanto maior o paradigma, menor a redundância do banco de dados.

Atualmente, os bancos de dados relacionais têm 5+1 formas normais: primeira forma normal (1NF), segunda forma normal (2NF), terceira forma normal (3NF), forma normal de Bath-Codd (BCNF), quarta forma normal (4NF) e quinta Paradigma da forma normal (5NF, também conhecido como paradigma perfeito). A forma normal que atende aos requisitos mínimos é a primeira forma normal (1NF). Com base na primeira forma normal, aquela que satisfaz mais requisitos normativos é chamada de segunda forma normal (2NF), e o restante das formas normais pode ser deduzido por analogia. Se a forma normal exigida não for atendida, a parte que não atender aos requisitos da forma normal será dividida em tabelas. De um modo geral, o banco de dados só precisa satisfazer a terceira forma normal (3NF).

Conceitos em Design de Banco de Dados

  • Entidade: algo que existe objetivamente e pode ser distinguido no mundo real. Por exemplo, "um aluno", "um livro", "um curso" e assim por diante. Vale ressaltar que as “coisas” aqui mencionadas não são apenas “coisas” tangíveis, elas também podem ser virtuais, melhor dizer “a relação entre professores e escolas”.
  • Atributo: É explicado nos livros didáticos como: "uma certa característica de uma entidade", então pode-se ver que o atributo é um conceito lógico no início, por exemplo, "gênero" é um atributo de "pessoa". Em um banco de dados relacional, um atributo é outro conceito físico e um atributo pode ser considerado como uma "coluna de uma tabela".
  • Tupla: Uma linha em uma tabela é uma tupla.
  • Componente: Um valor de atributo da tupla. Em um banco de dados relacional, é um átomo de operação, ou seja, quando o banco de dados relacional realiza qualquer operação, o atributo é "inseparável". Caso contrário, não é um banco de dados relacional.
  • Código: Um determinado atributo (ou grupo de atributos) de uma tupla pode ser determinado exclusivamente na tabela. Se houver mais de um desses códigos, chame
  • Seleção de código, escolha um dos códigos candidatos para ser o chefe, é chamado de código principal.
  • Código completo: se um código contém todos os atributos, esse código é um código completo.
  • Atributo principal: desde que um atributo apareça em qualquer código candidato, esse atributo é o atributo principal.
  • Atributo não principal: Ao contrário do anterior, se não apareceu em nenhum código candidato, este atributo é um atributo não principal.
  • Chave externa: Um atributo (ou grupo de atributos), não é uma chave, mas é uma chave em outra tabela, é uma chave externa.
  • Chave candidata: Se o valor de um atributo ou grupo de atributos no relacionamento puder identificar exclusivamente uma tupla e qualquer subconjunto adequado dela não puder mais ser identificado, o grupo de atributos será chamado de chave candidata (supercódigo).

Definição de chave primária

As chaves primárias podem ser divididas em duas categorias: chaves primárias naturais e chaves primárias substitutas. Geralmente é recomendado usar uma chave primária substituta

  • Use a combinação de todas as colunas da tabela como chave primária – chave candidata
  • Remova algumas das colunas para ver se uma linha de dados pode ser identificada exclusivamente
  • O subconjunto apropriado de todas as chaves candidatas finalmente encontradas é a chave principal

Prática recomendada: você pode adicionar um campo que não tenha nada a ver com negócios como chave primária na tabelaid bigint primary keyauto_increment

NF1

所有列不可分,字段满足原子性

Defina alunos, alunos (número, número da turma, nome, parentes), esta coluna relativa é divisível, então a coluna relativa é dividida em outra tabela, para que as colunas restantes atendam à NF1 e a estrutura final seja selecionada como aluno (número, número da turma, nome), parentes do aluno (nome, parentesco, código externo)

NF2

消除对主键的部分依赖

Defina alunos, alunos (número, número da turma, nome, número do prédio do dormitório), a chave primária é uma chave primária composta (número, número da turma), aqui você descobrirá que, uma vez determinado o número da turma, o departamento ao qual pertence é determinado, e o departamento é confirmado O número do prédio do dormitório Claro. O número do prédio do dormitório depende parcialmente da chave primária, não da chave primária inteira. A maneira de resolver o problema é dividir a tabela alunos (número, número da turma, nome) acomodação estudantil (número da turma, número do prédio do dormitório)

NF3

消除对主键的传递依赖

Defina alunos, alunos (número do aluno pk, departamento, número do prédio do dormitório), a chave primária é o número do aluno, então NF2 é naturalmente satisfeito, mas uma vez que o departamento é determinado, o número do prédio do dormitório é determinado, então o número do prédio do dormitório depende no departamento, não na carteira de estudante. Aqui está a dependência transitiva: número do prédio do dormitório –> departamento –> número do aluno pk. subtabela

Paradigma e antiparadigma

A aplicação de um paradigma pode reduzir a redundância de dados, mas quanto maior o nível do paradigma, mais tabelas serão criadas e a eficiência da consulta será menor. Portanto, no desenvolvimento específico, é frequentemente usado para reduzir os requisitos do paradigma e usar dados redundantes razoáveis ​​para melhorar a eficiência da consulta

Considere a eficiência da consulta, então geralmente alcance apenas NF3 e, às vezes, requisitos de paradigma ainda mais baixos de propósito para melhorar a eficiência da consulta [antiparadigma]

Caso clássico: sites de comércio eletrônico, como JD.com e Taobao

Produto (número do produto (pk), categoria do produto) –> produto (pk número do produto, número da categoria), categoria (número de destino da categoria, nome da categoria)

A quantidade de produtos é muito grande, e as categorias são divididas em 3 níveis 10 10 10

Aplicação prática: mercadoria (número, nome da categoria de 1º nível, nome da categoria de 2º nível, nome da categoria de 3º nível)

Tabelas e relacionamentos entre tabelas

Existem três tipos de relacionamentos entre tabelas e tabelas [entidades]:

  • Um para um 1:1, por exemplo, uma pessoa só pode ter um cartão de identificação e um cartão de identificação só pode pertencer a uma pessoa
  • Um-para-muitos ou muitos-para-um 1:m ou m:1, por exemplo, uma categoria pode conter várias mercadorias e uma mercadoria só pode pertencer a uma categoria
  • Muitos para muitos n:m, por exemplo, um aluno pode fazer vários cursos e um curso pode ser feito por muitos alunos

O método de examinar o relacionamento entre tabelas [entidades]: neutro

um a um

Existem duas maneiras de implementar um para um: chave primária compartilhada ou chave estrangeira exclusiva. por exemplo, pessoa e id

chave primária compartilhada

  • Na tabela slave tb_person, a coluna id é a chave primária e a chave estrangeira da tabela atual
create table tb_card(
id bigint primary key auto_increment comment '不是身份证号码,仅仅是一个非业务含义
的编号',
name varchar(32) not null,
birth date
);
create table tb_person(
id bigint primary key, -- 这里的主键值来源于tb_card的主键值,主键约束非空唯一
-- 人的编号来源于card表种的编号值,而且on delete cascade级联删除,表示删除对应的身份证
信息时会自动删除对应的用户信息
foreign key(id) references tb_card(id) on delete cascade,
salary decimal(8,2)
);

chave estrangeira única

create table tb_card(
id bigint primary key auto_increment,
name varchar(32) not null
);
create table tb_person(
id bigint primary key auto_increment,
salary decimal(8,2),
card_id bigint not null unique,-- not null非空约束; unique唯一性约束,表示该列值不
允许重复
foreign key(card_id) references tb_card(id) on delete cascade
);

implementação especial

Por exemplo, monogamia, como salvar as informações de todas as pessoas em uma tabela

Número (PK) Nome gênero número da esposa número do marido
1 Zhao Xiaopang verdadeiro 2 nulo
2 Wang Xiaohua falso nulo 1
3 Zhang Yi verdadeiro nulo nulo

Outra implementação

número de série Nome gênero número do cônjuge
1 Zhao Xiaopang verdadeiro 2
2 Wang Xiaohua falso 1
3 Zhang Yi verdadeiro nulo

Definição da tabela de dados

create table tb_person(
id bigint primary key auto_increment,
name varchar(10) not null,
sex boolean default 1,
pei_id bigint unique,
foreign key(pei_id) references tb_person(id)
);

um para muitos

Na verdade, por padrão, a chave estrangeira fk refere-se à chave primária pk, que é uma associação de um para muitos.Por exemplo, uma pessoa tem vários carros e um carro só pode pertencer a uma pessoa.

create table tb_person(
id bigint primary key,
name varchar(20)
);
create table tb_car(
id bigint primary key,
title varchar(32) not null,
person_id bigint not null,
foreign key(person_id) references tb_person(id)
);

muitos para muitos

Na verdade, relacionamentos muitos-para-muitos não podem ser expressos diretamente em bancos de dados relacionais, e tabelas intermediárias devem ser introduzidas. por exemplo, cursos eletivos para estudantes

create table tb_student(
id bigint primary key auto_increment comment '学生编号',
name varchar(10) not null comment '学生姓名'
) comment '学生表';
create table tb_course(
id bigint primary key auto_increment comment '课程编号',
title varchar(32) not null comment '课程名称'
) comment '课程表';
create table tb_choice(
sid bigint comment '学生编号',
cid bigint comment '课程编号',
-- 不允许重复选修
primary key(sid,cid),
-- 不允许出现的学生信息错误
foreign key(sid) references tb_student(id) on delete cascade,
-- 不允许选修不存在的课程
foreign key(cid) references tb_course(id) on delete cascade
) comment '选课表,用于表示多对多关系';

Power Designer

O Power Designer é o conjunto de ferramentas CASE da Sybase Corporation, que pode ser usado para analisar e projetar o sistema de informações de gerenciamento de maneira conveniente e quase inclui todo o processo de design do modelo de banco de dados

CASE (Computer Aided (ou Assisted) Software Engineering). Originalmente se refere a um ambiente de desenvolvimento de software abrangente em larga escala composto por vários softwares e ferramentas auxiliadas por computador usadas para apoiar o desenvolvimento de sistemas de informações gerenciais. Com o surgimento, desenvolvimento, melhoria e integração contínua de várias ferramentas e tecnologias de software, gradualmente muda de um simples O ambiente de ferramenta de desenvolvimento auxiliar é transformado em uma metodologia relativamente independente

vantagem

  • Não há necessidade de usar create table e outras instruções para criar estruturas de tabela, as instruções do banco de dados podem ser geradas automaticamente
  • Os designers de banco de dados se concentram apenas em como modelar dados

Processo de Design Básico

1. Crie um Modelo de Dados Conceitual

  • modelo de aplicativo estereotipado
  • Força obrigatória não pode estar vazia
  • O domínio domínio pode ser entendido como uma faixa de valores, definindo valores máximos, valores mínimos e restrições. Depois de definidos pelo usuário, os campos podem ser usados ​​para definir rapidamente os atributos do campo ao criar uma nova entidade. Model-Domains precisam ser criados primeiro e depois usados

2. Estabeleça uma conexão entre entidades

3. Check CDM: Selecione a opção Tools na barra de menu, selecione Check Model, e abra a interface para verificação do modelo

4. Converter CDM em PDM: opção Ferramentas na barra de menus, selecione Gerar Modelo de Dados Físicos

5. Gerar arquivos sql por PDM: Clique em Gerar banco de dados no banco de dados na barra de menu da página PDM

Acho que você gosta

Origin blog.csdn.net/qq_39756007/article/details/127214949
Recomendado
Clasificación