Dúvida sobre relacionamento Pk e FK PostgreSQL

4 respostas
P

Olá pessoal!

estou começando estudar banco de dados, e estou criando algumas aplicações básicas para testar as funcionalidades do SGDB PostgreSQL. Estou com uma dúvida básica sobre relacionamento PK e FK. Tendo duas tabelas:

CREATE TABLE tbUsers

(

UserID serial NOT NULL,

UserName character varying(100) NOT NULL,

UserLogin character varying(20) NOT NULL,

UserPassword character varying(10) NOT NULL,

UserStatus integer NOT NULL,

CONSTRAINT tbUsers_pkey PRIMARY KEY (UserID)

);
CREATE TABLE “tbPermissions”

(

“PermissionID” serial NOT NULL,

“PermissionUSERmodule” integer NOT NULL,

“PermissionADMmodule” integer NOT NULL,

CONSTRAINT “tbPermissions_pkey” PRIMARY KEY (“PermissionID”)

);

Tenho idéia que a coluna “UserID” da tabela tbUsers seria minha PKey e gera valores sequênciais atribuídos por “sequences” no postgresql.
Agora eu preciso que essa informação seja replicada automaticamente para a coluna “PermissionID” da tabela tbPermissions nesse caso ela seria uma FKey.

O que tenho a dúvida se é uma boa prática eu atribuir o valor de uma chave estrangeira a uma chave primaria neste caso “PermissionID” e se neste caso o valor do campo “IDPermission” tem que ser serial, pois não geraria valor algum somente herdaria da Pkey “UserID”.

E isso ai galera, espero que tenha explicado minha dúvida com clareza.

grato.

4 Respostas

G

Des de quando eu sei os colunas não se alto replicada umas paras as outras posso estar enganado pois sou iniciante ainda em DB também.

Pensa assim vc já tem esse Banco feito e está rodando junto com o java por exemplo quem vai fazer essa ?replicação? entre coluna x e coluna y e a linguagem e não o banco.

A

Desta forma você vai garantir uma relação entre tabelas 1:1. Neste caso está certo, pois você deve escolher uma das tabelas para receber a chave estrangeira.

Att.

P

Olá,

Tem varias formas de fazer isso, tanto através do banco associando o relacionamento através de um “CASCADE UPDATE” e também pelo hibernate

alg[b]o +/- assim:


@Cascade(CascadeType.ALL)

nesse caso se usar o hibernate não usarei a oção do “CASCADE UPDATE” do postgreSQL no relacionamento OneToOne.

P

Adelar,

Obrigado pela sua ajuda!

poderia me dizer neste caso do relacionamento OneToOne o valor do campo quw receberá o valor FKey “PermissionID” tem que ser serial?
Pois como te disse ele nào gerará nenhum valor sequencial… falo isso pq quando crio uma coluna com valor tipo serial o postgresql gera uma sequence, que segundo os manuais que andei lendo servem para gerar valores automatizados neles.
Nesse caso devo usar integer?

muito obrigado!

Criado 29 de janeiro de 2010
Ultima resposta 29 de jan. de 2010
Respostas 4
Participantes 3