REGRA PARA DEFINIO DE NOMES DE CONSTRAINT FK

 Tópico anterior Próximo tópico Novo tópico

REGRA PARA DEFINIO DE NOMES DE CONSTRAINT FK

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#475810 - 16/08/2017 15:47:12

KELLY
BRASILIA
Cadast. em:Setembro/2009


Ol a todos!

Estou com uma grande dvida em relao aos nomes de constraints para chave estrangeira. Sempre que criei um banco de dados usando interface grfica, a prpria ferramente gerava estes nomes pra mim. Sugiu a dvida agora que estou criando manualmente um banco de dados via script. Pesquisei no Google e vi que outras pessoas tambm tm essa mesma dvida. Ento adotei um padro para a nomenclatura de constraints para chave estrangeira da seguinte forma FK_NomeTabelaSecundria_NomeTabelaPrimria_NomeChaveEstrangeira.

No sei se a forma correta, mas segue o cdigo utilizando a regra na prtica para vocs me auxiliarem. Grata!

  
-- PEDIDOS
IF OBJECT_ID([]dbo.PEDIDOS[], []U[]) IS NOT NULL
    DROP TABLE dbo.PEDIDOS
GO

-- VENDEDORES
IF OBJECT_ID([]dbo.VENDEDORES[], []U[]) IS NOT NULL
    DROP TABLE dbo.VENDEDORES
GO

-- VENDEDORES
CREATE TABLE VENDEDORES
(
    IdVendedor            INT  NOT NULL IDENTITY(1,1),
    IdGerenteVendas        INT,
    NomeVendedor        VARCHAR(60),
    QuotaVendas            DECIMAL(12,2),
    BonusVenda            DECIMAL(6,2)
)
GO

ALTER TABLE VENDEDORES
ADD CONSTRAINT PK_IdVendedor PRIMARY KEY CLUSTERED (IdVendedor)
GO

-- CLIENTES
IF OBJECT_ID([]dbo.CLIENTES[], []U[]) IS NOT NULL
    DROP TABLE dbo.CLIENTES
GO
CREATE TABLE CLIENTES
(
    IdCliente            INT    NOT NULL IDENTITY(1,1),
    NomeCliente            VARCHAR(60),
    EndCliente            VARCHAR(50)
)
GO

ALTER TABLE CLIENTES
ADD CONSTRAINT PK_IdCliente PRIMARY KEY CLUSTERED (IdCliente)
GO

-- TRANSPORTADORAS
IF OBJECT_ID([]dbo.TRANSPORTADORAS[], []U[]) IS NOT NULL
    DROP TABLE dbo.TRANSPORTADORAS
GO
CREATE TABLE TRANSPORTADORAS
(
    IdTransportadora    INT NOT NULL,
    NomeTransportadora    VARCHAR(60),
    MeioTransporte        VARCHAR(50),
    PrcFrete            DECIMAL(12,2),
    PrazoMaximoDias        INT
)
GO

ALTER TABLE TRANSPORTADORAS
ADD CONSTRAINT PK_IdTransportadora PRIMARY KEY CLUSTERED (IdTransportadora)
GO

-- PEDIDOS
CREATE TABLE PEDIDOS
(
    IdPedido            INT NOT NULL,
    IdCliente            INT NOT NULL,
    IdTransportadora    INT NOT NULL,
    IdVendedor            INT NOT NULL,
    DataPedido            SMALLDATETIME,
    QtdItensPedido        INT
)
GO

ALTER TABLE PEDIDOS
ADD CONSTRAINT PK_IdPedido PRIMARY KEY CLUSTERED (IdPedido)
GO

-- ITENS_PEDIDO
IF OBJECT_ID([]dbo.ITENS_PEDIDO[], []U[]) IS NOT NULL
    DROP TABLE dbo.ITENS_PEDIDO
GO
CREATE TABLE ITENS_PEDIDO
(
    IdPedido            INT NOT NULL,
    IdProduto            INT NOT NULL,
    ValDesconto            DECIMAL(12,2),
    QtdPedida            INT
)
GO

ALTER TABLE ITENS_PEDIDO
ADD CONSTRAINT PK_PedidodProduto PRIMARY KEY CLUSTERED (IDPEDIDO, IDPRODUTO)
GO

-- PRODUTOS
IF OBJECT_ID([]dbo.PRODUTOS[], []U[]) IS NOT NULL
    DROP TABLE dbo.PRODUTOS
GO
CREATE TABLE PRODUTOS
(
    IdProduto            INT NOT NULL,
    NomeProduto            VARCHAR(60),
    UnidMedidaProduto    VARCHAR(40),
    IdCategoria            INT,
    PrecoProduto        DECIMAL(12,2)
)
GO

ALTER TABLE PRODUTOS
ADD CONSTRAINT PK_IdProduto PRIMARY KEY CLUSTERED (IdProduto)
GO

-- CATEGORIAS
IF OBJECT_ID([]dbo.CATEGORIAS[], []U[]) IS NOT NULL
    DROP TABLE dbo.CATEGORIAS
GO
CREATE TABLE CATEGORIAS
(
    IdCategoria            INT NOT NULL,
    NomeCategoria        VARCHAR(60),
    CategoriaPerecivel    VARCHAR(60),
    VendeOnLine            BIT
)
ALTER TABLE CATEGORIAS
ADD CONSTRAINT PK_IdCategoria PRIMARY KEY CLUSTERED (IdCategoria)
GO

-- VENDEDORES
ALTER TABLE VENDEDORES
ADD CONSTRAINT FK_VENDEDORES_VENDEDORES_IdVendedor FOREIGN KEY(IdGerenteVendas) REFERENCES VENDEDORES(IdVendedor)
    --ON UPDATE CASCADE
GO

-- PEDIDOS
ALTER TABLE PEDIDOS
ADD CONSTRAINT FK_PEDIDOS_VENDEDORES_IdVendedor FOREIGN KEY(IdVendedor) REFERENCES VENDEDORES(IdVendedor)
    --ON UPDATE CASCADE
    --ON DELETE CASCADE
GO

ALTER TABLE PEDIDOS
ADD CONSTRAINT FK_PEDIDOS_CLIENTES_IdCliente FOREIGN KEY(IdCliente) REFERENCES CLIENTES(IdCliente)
    --ON UPDATE CASCADE
    --ON DELETE CASCADE
GO

ALTER TABLE PEDIDOS
ADD CONSTRAINT FK_PEDIDOS_TRANSPORTADORAS_IdTransportadora FOREIGN KEY(IdTransportadora) REFERENCES TRANSPORTADORAS(IdTransportadora)
    --ON UPDATE CASCADE
    --ON DELETE CASCADE
GO

-- ITENS_PEDIDO
ALTER TABLE ITENS_PEDIDO
ADD CONSTRAINT FK_ITENS_PEDIDO_PEDIDOS_IdPedido FOREIGN KEY(IdPedido) REFERENCES PEDIDOS(IdPedido)
    --ON UPDATE CASCADE
    --ON DELETE CASCADE
GO

ALTER TABLE ITENS_PEDIDO
ADD CONSTRAINT FK_PRODUTOS_IdProduto FOREIGN KEY(IdProduto) REFERENCES PRODUTOS(IdProduto)
    --ON UPDATE CASCADE
    --ON DELETE CASCADE
GO

-- PRODUTOS
ALTER TABLE PRODUTOS
ADD CONSTRAINT FK_PRODUTOS_CATEGORIAS_IdCategoria FOREIGN KEY(IdCategoria) REFERENCES CATEGORIAS(IdCategoria)
    ON UPDATE CASCADE
    ON DELETE CASCADE
GO




Resposta escolhida #475811 - 16/08/2017 16:19:00

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Uma das regras de ouro quanto nomenclatura ser sucinto, mas ao mesmo tempo passar a idia do que o objeto de forma mais completa possvel. No tem exatamente uma regra rgida, meio que pessoal, mas como esses nomes de constraints so raramente usados, faz muito pouca diferena na verdade.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#475812 - 16/08/2017 17:39:04

KELLY
BRASILIA
Cadast. em:Setembro/2009


Ol Kerplunk!!

O que voc sugere desse padro que estou adotando, est claro para quem for analisar o script e o banco de dados?



#475813 - 16/08/2017 17:54:03

SINCLAIR
CRICIUMA
Cadast. em:Janeiro/2001


Colega Kelly,

No equilbrio entre sucinto e informativo, acho que teu padro ficou bom.
Dificilmente vais ter que lidar com estes nomes, contudo, se outro programador precisar te substituir em tuas frias, por exemplo (se que programador tem frias), ser fcil entender.

Tudo de bom.


Euzbio Cruz
Cricima - SC


#475815 - 16/08/2017 18:05:28

GUIMORAES
ITAPETININGA
Cadast. em:Agosto/2009


KELLY,

Acredito que o padro adotado est legal, bem legvel e de fcil interpretao.
E como os outros colegas disseram, uma questo pessoal, mas importante seguir uma padronizao, mesmo que algum tenha que mexer com isto no futuro.
O que voc deve se atentar, o tamanho do nome, pois em alguns bancos de dados existem limitaes do tamanho, no sei se o caso do SQL Server, pois nunca atingi este limite.




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por KELLY em 16/08/2017 20:00:02