como representar uma estrutura de árv ore no PostgreSQL ?

"Cristiano M. Magalhaes" <[email protected]> Sun, 22 Apr 2018 22:25:03 -0300
Newsgroups gmane.comp.db.postgresql.brasil
Message-ID <CAKSeAimgYOwDL-wmeLDSv0ZW5erY7E0UOguSup2mR9HwpFjp6A__23091.0148974091$1524446605$gmane$org@mail.gmail.com>
--===============8276552123763477070==
Content-Type: multipart/alternative; boundary="94eb2c064b7071352f056a79e96d"

--94eb2c064b7071352f056a79e96d
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Pessoal,

sauda=C3=A7=C3=B5es!

Por favor, eu estou precisando compreender como eu posso armazenar um
estrutura de uma "=C3=A1rvore" de dados, em um SGBD, como o PostgreSQL.

Por exemplo , imagine a seguinte estrutura de =C3=A1rvore abaixo, represent=
ando
uma estrutura de contas cont=C3=A1beis:

1     - Ativos
1.1   - Bancos
1.1.1 - Conta Corrente
1.1.2 - Conta Poupan=C3=A7a
1.1.3 - Conta Corrente 2
2     - Passivos
2.1   - Contas a Receber
3     - Patrim=C3=B4nio L=C3=ADquido
4     - Receitas
4.1   - Vendas
4.2   - Juros Recebidos
5     - Despesas
5.1   - =C3=81gua
5.2   - Luz

Como v=C3=AAem, cada "n=C3=B3" (conta) pode ter outros "n=C3=B3s" (contas) =
filhos.

Como eu poderia representar isso em SQL?

Eu penso que os c=C3=B3digos n=C3=A3o deveriam ser chaves prim=C3=A1rias. E=
u queria ter a
possibilidade de, se eu alterar o valor de um c=C3=B3digo de um n=C3=B3 pai=
, isso
refletir para os n=C3=B3s filhos. Exemplo: se eu renomear o c=C3=B3digo do =
"Ativos"
para "10", os ativos seriam renomeados para:

10     - Ativos
10.1   - Bancos
10.1.1 - Conta Corrente
10.1.2 - Conta Poupan=C3=A7a
10.1.3 - Conta Corrente 2


Como fazer isso no PostgreSQL ?

--
Cristiano M. Magalh=C3=A3es

--94eb2c064b7071352f056a79e96d
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac=
e,monospace;font-size:small">Pessoal,=C2=A0</div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace,monospace;font-size:small"><br></div><div=
 class=3D"gmail_default" style=3D"font-family:monospace,monospace;font-size=
:small">sauda=C3=A7=C3=B5es!</div><div class=3D"gmail_default" style=3D"fon=
t-family:monospace,monospace;font-size:small"><br></div><div class=3D"gmail=
_default" style=3D"font-family:monospace,monospace;font-size:small">Por fav=
or, eu estou precisando compreender como eu posso armazenar um estrutura de=
 uma &quot;=C3=A1rvore&quot; de dados, em um SGBD, como o PostgreSQL.</div>=
<div class=3D"gmail_default" style=3D"font-family:monospace,monospace;font-=
size:small"><br></div><div class=3D"gmail_default" style=3D"font-family:mon=
ospace,monospace;font-size:small">Por exemplo , imagine a seguinte estrutur=
a de =C3=A1rvore abaixo, representando uma estrutura de contas cont=C3=A1be=
is:</div><div class=3D"gmail_default" style=3D"font-family:monospace,monosp=
ace;font-size:small"><br></div><div class=3D"gmail_default" style=3D"font-s=
ize:small"><font face=3D"monospace, monospace">1=C2=A0 =C2=A0 =C2=A0- Ativo=
s</font></div><div class=3D"gmail_default" style=3D"font-size:small"><font =
face=3D"monospace, monospace">1.1=C2=A0 =C2=A0- Bancos</font></div><div cla=
ss=3D"gmail_default" style=3D"font-size:small"><font face=3D"monospace, mon=
ospace">1.1.1 - Conta Corrente</font></div><div class=3D"gmail_default" sty=
le=3D"font-size:small"><font face=3D"monospace, monospace">1.1.2 - Conta Po=
upan=C3=A7a</font></div><div class=3D"gmail_default" style=3D"font-size:sma=
ll"><font face=3D"monospace, monospace">1.1.3 - Conta Corrente 2</font></di=
v><div class=3D"gmail_default" style=3D"font-size:small"><font face=3D"mono=
space, monospace">2=C2=A0 =C2=A0 =C2=A0- Passivos</font></div><div class=3D=
"gmail_default" style=3D"font-size:small"><font face=3D"monospace, monospac=
e">2.1=C2=A0 =C2=A0- Contas a Receber</font></div><div class=3D"gmail_defau=
lt" style=3D"font-size:small"><font face=3D"monospace, monospace">3=C2=A0 =
=C2=A0 =C2=A0- Patrim=C3=B4nio L=C3=ADquido</font></div><div class=3D"gmail=
_default" style=3D"font-size:small"><font face=3D"monospace, monospace">4=
=C2=A0 =C2=A0 =C2=A0- Receitas</font></div><div class=3D"gmail_default" sty=
le=3D"font-size:small"><font face=3D"monospace, monospace">4.1=C2=A0 =C2=A0=
- Vendas</font></div><div class=3D"gmail_default" style=3D"font-size:small"=
><font face=3D"monospace, monospace">4.2=C2=A0 =C2=A0- Juros Recebidos</fon=
t></div><div class=3D"gmail_default" style=3D"font-size:small"><font face=
=3D"monospace, monospace">5=C2=A0 =C2=A0 =C2=A0- Despesas</font></div><div =
class=3D"gmail_default" style=3D"font-size:small"><font face=3D"monospace, =
monospace">5.1=C2=A0 =C2=A0- =C3=81gua</font></div><div class=3D"gmail_defa=
ult" style=3D"font-size:small"><font face=3D"monospace, monospace">5.2=C2=
=A0 =C2=A0- Luz</font></div><div class=3D"gmail_default" style=3D"font-fami=
ly:monospace,monospace;font-size:small"><br></div><div class=3D"gmail_defau=
lt" style=3D"font-family:monospace,monospace;font-size:small">Como v=C3=AAe=
m, cada &quot;n=C3=B3&quot; (conta) pode ter outros &quot;n=C3=B3s&quot; (c=
ontas) filhos.</div><div class=3D"gmail_default" style=3D"font-family:monos=
pace,monospace;font-size:small"><br></div><div class=3D"gmail_default" styl=
e=3D"font-family:monospace,monospace;font-size:small">Como eu poderia repre=
sentar isso em SQL?=C2=A0</div><div class=3D"gmail_default" style=3D"font-f=
amily:monospace,monospace;font-size:small"><br></div><div class=3D"gmail_de=
fault" style=3D"font-family:monospace,monospace;font-size:small">Eu penso q=
ue os c=C3=B3digos n=C3=A3o deveriam ser chaves prim=C3=A1rias. Eu queria t=
er a possibilidade de, se eu alterar o valor de um c=C3=B3digo de um n=C3=
=B3 pai, isso refletir para os n=C3=B3s filhos. Exemplo: se eu renomear o c=
=C3=B3digo do &quot;Ativos&quot; para &quot;10&quot;, os ativos seriam reno=
meados para:</div><div class=3D"gmail_default" style=3D"font-family:monospa=
ce,monospace;font-size:small"><br></div><div class=3D"gmail_default" style=
=3D"font-family:monospace,monospace;font-size:small">

<div class=3D"gmail_default" style=3D"color:rgb(34,34,34);font-family:arial=
,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal=
;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:=
start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0=
px;text-decoration-style:initial;text-decoration-color:initial"><font face=
=3D"monospace, monospace">10=C2=A0 =C2=A0 =C2=A0- Ativos</font></div><div c=
lass=3D"gmail_default" style=3D"color:rgb(34,34,34);font-family:arial,sans-=
serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-=
variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;=
text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;tex=
t-decoration-style:initial;text-decoration-color:initial"><font face=3D"mon=
ospace, monospace">10.1=C2=A0 =C2=A0- Bancos</font></div><div class=3D"gmai=
l_default" style=3D"color:rgb(34,34,34);font-family:arial,sans-serif;font-s=
ize:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps=
:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:=
0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration=
-style:initial;text-decoration-color:initial"><font face=3D"monospace, mono=
space">10.1.1 - Conta Corrente</font></div><div class=3D"gmail_default" sty=
le=3D"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font=
-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-w=
eight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-trans=
form:none;white-space:normal;word-spacing:0px;text-decoration-style:initial=
;text-decoration-color:initial"><font face=3D"monospace, monospace">10.1.2 =
- Conta Poupan=C3=A7a</font></div><div class=3D"gmail_default" style=3D"col=
or:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:no=
rmal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400=
;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none=
;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-dec=
oration-color:initial"><font face=3D"monospace, monospace">10.1.3 - Conta C=
orrente 2</font></div>

<br></div><div class=3D"gmail_default" style=3D"font-family:monospace,monos=
pace;font-size:small"><br></div><div class=3D"gmail_default" style=3D"font-=
family:monospace,monospace;font-size:small">Como fazer isso no PostgreSQL ?=
=C2=A0</div><div class=3D"gmail_default" style=3D"font-family:monospace,mon=
ospace;font-size:small"><br></div><div><div class=3D"gmail_signature" data-=
smartmail=3D"gmail_signature"><div dir=3D"ltr"><div><font face=3D"monospace=
, monospace">--<br>Cristiano M. Magalh=C3=A3es<br></font><div><span style=
=3D"font-family:verdana,sans-serif"><br></span></div><div><div style=3D"fon=
t-family:&#39;courier new&#39;,monospace"><br></div></div></div></div></div=
></div>
</div>

--94eb2c064b7071352f056a79e96d--

--===============8276552123763477070==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGdici1nZXJh
bCBtYWlsaW5nIGxpc3QKcGdici1nZXJhbEBsaXN0YXMucG9zdGdyZXNxbC5vcmcuYnIKaHR0cHM6
Ly9saXN0YXMucG9zdGdyZXNxbC5vcmcuYnIvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3BnYnIt
Z2VyYWw=

--===============8276552123763477070==--