<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=210</link>
		<description><![CDATA[Najświeższe odpowiedzi w Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel..]]></description>
		<lastBuildDate>Thu, 14 May 2009 12:04:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=865#p865</link>
			<description><![CDATA[A w takim przypadku nie lepiej zastosować tabele typu INHERITS ? Zakładasz tabelę zwierzęta a potem dziedziczyć odp. zwierzaczki i dodawać odp. pola ?. Klucz obcy wtedy do tabeli głównej która ma te elementy. 
Ewentualnie 3 klucze obce (z NULL'ami oczywiście) na każdą tabelę i check o którym koledzy mówili wcześniej.]]></description>
			<author><![CDATA[dummy@example.com (orcus)]]></author>
			<pubDate>Thu, 14 May 2009 12:04:52 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=865#p865</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=852#p852</link>
			<description><![CDATA[no to pewnie zostaje ci tylko trigger. Ale bedzie jechalo to po wydajnosci.]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Wed, 13 May 2009 10:00:37 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=852#p852</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=851#p851</link>
			<description><![CDATA[[quote=rski]A to przepraszam, warto trzymać tabelę z jednym id? W sensie z jedną kolumną[/quote]

w tej tabeli są jeszcze inne kolumny wspólne dla wszystkich gatunków np. data_urodzenia,data_kupna ...


...nie chęć wnikać w ten przykład ze zwierzętami, ale cały czas pytam jak rozwiązać opisywany problem...??]]></description>
			<author><![CDATA[dummy@example.com (dfs)]]></author>
			<pubDate>Wed, 13 May 2009 08:53:33 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=851#p851</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=849#p849</link>
			<description><![CDATA[A to przepraszam, warto trzymac tabelę z jednym id? W sensie z jedną kolumną]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 12 May 2009 21:29:14 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=849#p849</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=848#p848</link>
			<description><![CDATA[no unikalny [b]nr_zwierzęcia[/b] który nie zlezy od gatunku.]]></description>
			<author><![CDATA[dummy@example.com (dfs)]]></author>
			<pubDate>Tue, 12 May 2009 21:27:16 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=848#p848</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=847#p847</link>
			<description><![CDATA[Co w tym momencie przechowuje tabela zwierzęta, jeśli wszystkie cechy masz w tabelach zależnych?]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 12 May 2009 18:53:43 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=847#p847</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=846#p846</link>
			<description><![CDATA[[quote=rski]No to jak dla mnie beznadziejne rozwiązanie i skopana struktura bazy danych. 
Z tego co rozumiem, że wartości w tabelach w odpowiednich 'powiązanych' z tabelą A kolumnach nie mogą się powtarzać tzn
B1, B2 i B3 mają na pewno różne wartości w powiązanych kolumnach. Tak? Jeśli tak, to czy te wartości są liczbowe i sam je generujesz jakimś licznikiem?[/quote]

no generuję ID serial'em.

---------

Ale żebym był zrozumiany... może tak łopatologicznie dam przykład z życia:


Mamy np. tabelę zwierzęta w której kluczem głównym jest [b]nr_zwierzęcia[/b],  zwierząt może być 3 gatunki (np. "kot","wąż","gąsienica"), ale wszystkie zwierzęta nie zależnie od gatunku musimy zidentyfikować po numerze [b]nr_zwierzęcia[/b].

Dalej idąc każdy gatunek ma zupełnie różne cechy i wymaga innych tabel, bo np. dla kota zapytamy o kolor sierści i długość pazurów, dla węża o to czy jest jadowity, zaś o gąsienice ilość pierścieni.

Tabele (pomijając estetykę typów) mógłby wyglądać np. tak:
[i]
zwierzęta ([b]nr_zwierzecia[/b] serial primary_key,...,...,...);[/i]

[i]kot(IDzwirzedzia foreing key [b]nr_zwierzecia.zwierzęta[/b],kolor_sierści text, długość_pazurów int);
wąż(IDzwirzedzia foreing key[b] nr_zwierzecia.zwierzęta[/b],czy_jadowity bool);
gąsienica(IDzwirzedzia foreing key [b]nr_zwierzecia.zwierzęta[/b],ilość_pierscieni int);[/i]

[i]//tylko brakuje mi  tu właśnie ograniczenia że pod jeden [b]nr_zwierzecia[/b] będą mogli podłączyć się jednocześnie jakiś kot i wąż.[/i]


Me pytanie dotyczy tego jak to optymalnie i pamięciowo dobrze zrobić?]]></description>
			<author><![CDATA[dummy@example.com (dfs)]]></author>
			<pubDate>Tue, 12 May 2009 18:42:45 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=846#p846</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=843#p843</link>
			<description><![CDATA[No to jak dla mnie beznadziejne rozwiązanie i skopana struktura bazy danych. 
Z tego co rozumiem, że wartości w tabelach w odpowiednich 'powiązanych' z tabelą A kolumnach nie mogą się powtarzać tzn
B1, B2 i B3 mają na pewno różne wartości w powiązanych kolumnach. Tak? Jeśli tak, to czy te wartości są liczbowe i sam je generujesz jakimś licznikiem?]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 12 May 2009 18:05:15 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=843#p843</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=842#p842</link>
			<description><![CDATA[[quote=rski]Czy to znaczy ze w tylko w jednej z kolumn B1, B2, B3 moze byc w wierszu wstawiona wartość, jeśli tak to 
[code]
check (B1 is not null and B2 is null and B3 is null) or
(B1 is null and B2 is not null and B3 is null) or
(B1 is null and B2 is null and B3 is not null) or
[/code][/quote]

Nie do końca tak... gdyż B1,B2 czy B3 to nie kolumny, a tabele. Takie tabele gdzie każda ma kolumnę z kluczem obcym.]]></description>
			<author><![CDATA[dummy@example.com (dfs)]]></author>
			<pubDate>Tue, 12 May 2009 17:30:46 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=842#p842</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=841#p841</link>
			<description><![CDATA[Czy to znaczy ze w tylko w jednej z kolumn B1, B2, B3 moze byc w wierszu wstawiona wartość, jeśli tak to 
[code]
check (B1 is not null and B2 is null and B3 is null) or
(B1 is null and B2 is not null and B3 is null) or
(B1 is null and B2 is null and B3 is not null) or
[/code]]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 12 May 2009 15:57:35 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=841#p841</guid>
		</item>
		<item>
			<title><![CDATA[Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=840#p840</link>
			<description><![CDATA[Witam!


Mam paki problem, tworzę relacjną bazę danych jest to kilkanaście tabel (relacja 1 do wielu).



Problem pojawia się w momencie gdy od jednej tabeli (nazwijmy ją [b]"A"[/b]) mogą "wychodzić"  relację (1 do wielu) dla trzech różnych tabel ([b]"B1","B2","B3"[/b]), przy czym te relację się [u]wzajemnie wykluczają[/u].
Inaczej mówiąc dla danego rekordu od tabeli [b]A [/b]może wyjść tylko jedna relacja do tabeli [b]B1[/b] albo [b]B2[/b] albo [b]B3[/b], nie może być możliwości że dla danego rekordu klucza w tabeli[b] A[/b] klucz obcy dla niego znajduje się i w [b]B1[/b] i w [b]B2[/b] jednocześnie. 

Od razu dodam że z powodu rożnej dalszej struktury danych nie ma możliwości zbudowania dla tabel B1.B2 i B3 jednej konstrukcji B.


Jak mój problem rozwiązać aby baza zachowała stabilność?? Aby nie było możliwości aby od danego rekordu klucza tabeli [b]A[/b] wychodził klucze obce w tabeli [b]B1[/b] i[b] B2[/b] jednocześnie??


Jakie ograniczenie zastosować?? Jak ten problem rozwiązać??]]></description>
			<author><![CDATA[dummy@example.com (dfs)]]></author>
			<pubDate>Tue, 12 May 2009 14:38:43 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=840#p840</guid>
		</item>
	</channel>
</rss>
