Usuário com melhor resposta
Como criar uma relação 1:1 no SQL Managment

Pergunta
-
Olá entendo pouco de SQL, mas fiz banco de dados na faculdade, e lá a gente criava modelos de bancos as vezes com relação 1:1.
Eu tenho essa relação conforme imagem abaixo, que gostaria de fosse 1:1, porque outras tabelas também vão precisar de ter endereço, e não queria duplicar isso em todas as tabelas. Porém quando eu deletasse um "Colaborador" gostaria que deletasse o "Endereço" correspondente. E da forma que fiz está ao contrário. Quando deleto "Colaborador" o "Endereço" fica, só se deletar o "Endereço" que deleta o "Colaborador" assim tá errado.
Eu consigo fazer isso tirando o "CodEndereco" da tabela "Colaborador" e colocando o "CodColaborador" na tabela "Endereço", ai o DELETE CASCATE vai funcionar corretamente, porém ai vou ter que colocar além de "CodColaborador", também "CodCliente" para criar uma relação de Endereço_Cliente. Essa seria a forma correta mesmo? Ainda sim seria uma relação 1:n, mas pelo menos o DELETE CASCATE iria funcionar corretamente.
Gostaria se tem como implementar a relação 1:1 no SQL Management
Respostas
-
No Diagrama do Sql server, não tem como fazer isso , mas vc pode fazer o relacionamento 1:1 via script
Adicionando uma restrição UNIQUE na chave que vc quer .
exemplo ,sabendo que uma pessoa fisica só pode estar associado a um registro na tabela de pessoa
CREATE TABLE [dbo].[Pessoas] ( [IdPessoa] [INT] NOT NULL PRIMARY KEY, [Nome] [VARCHAR](50) NULL, ); CREATE TABLE [dbo].[PessoaFisica] ( [IdPessoaFisica] [INT] NOT NULL PRIMARY KEY, [IdPessoa] [INT] NOT NULL FOREIGN KEY REFERENCES dbo.Pessoas (IdPessoa), [CPF] [VARCHAR](15) NULL);
basta criar a restrição
ALTER TABLE dbo.PessoaFisica ADD CONSTRAINT UniqueIdPessoa UNIQUE(IdPessoa)
Wesley Neves - Brasilia-DFhttps://wesleyneves.wordpress.com/
SELECT Tab.[that's me:]
FROM
(
VALUES
('Wesley Neves'),
('Analista.NET'),
('Pós Graduando em Banco de Dados com ênfase em BI'),
('MTA -SQL Server'),
('MTA -Web Developed')
) AS Tab ("that's me:");
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 23 de fevereiro de 2018 12:31
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 23 de fevereiro de 2018 16:14
-
Consegui Obrigada a todos
CREATE UNIQUE NONCLUSTERED INDEX [UniqueExceptNulls] ON [Customers] (SSN) WHERE [SSN] IS NOT NULL
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 23 de fevereiro de 2018 16:14
Todas as Respostas
-
No Diagrama do Sql server, não tem como fazer isso , mas vc pode fazer o relacionamento 1:1 via script
Adicionando uma restrição UNIQUE na chave que vc quer .
exemplo ,sabendo que uma pessoa fisica só pode estar associado a um registro na tabela de pessoa
CREATE TABLE [dbo].[Pessoas] ( [IdPessoa] [INT] NOT NULL PRIMARY KEY, [Nome] [VARCHAR](50) NULL, ); CREATE TABLE [dbo].[PessoaFisica] ( [IdPessoaFisica] [INT] NOT NULL PRIMARY KEY, [IdPessoa] [INT] NOT NULL FOREIGN KEY REFERENCES dbo.Pessoas (IdPessoa), [CPF] [VARCHAR](15) NULL);
basta criar a restrição
ALTER TABLE dbo.PessoaFisica ADD CONSTRAINT UniqueIdPessoa UNIQUE(IdPessoa)
Wesley Neves - Brasilia-DFhttps://wesleyneves.wordpress.com/
SELECT Tab.[that's me:]
FROM
(
VALUES
('Wesley Neves'),
('Analista.NET'),
('Pós Graduando em Banco de Dados com ênfase em BI'),
('MTA -SQL Server'),
('MTA -Web Developed')
) AS Tab ("that's me:");
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 23 de fevereiro de 2018 12:31
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 23 de fevereiro de 2018 16:14
-
Olá, cara, pelo que entendi você está fazendo certo...
Acho sim que você deve levar o "CodColaborador" e "CodCliente" para dentro da tabela Endereço, como FK. Nem por isso a relação deixaria de ser 1:1, pois cada registro da tabela Endereço estaria relacionado a um registro da tabela Cliente ou Colaborador e vice-versa.
- Editado Bruno de P. Teixeira quarta-feira, 21 de fevereiro de 2018 21:05 Aprimorar a resposta
-
-
Consegui Obrigada a todos
CREATE UNIQUE NONCLUSTERED INDEX [UniqueExceptNulls] ON [Customers] (SSN) WHERE [SSN] IS NOT NULL
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 23 de fevereiro de 2018 16:14