<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=210&amp;type=atom"/>
	<updated>2009-05-14T12:04:52Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=210</id>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=865#p865"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[orcus]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=761</uri>
			</author>
			<updated>2009-05-14T12:04:52Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=865#p865</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=852#p852"/>
			<content type="html"><![CDATA[no to pewnie zostaje ci tylko trigger. Ale bedzie jechalo to po wydajnosci.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-05-13T10:00:37Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=852#p852</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=851#p851"/>
			<content type="html"><![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...??]]></content>
			<author>
				<name><![CDATA[dfs]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=903</uri>
			</author>
			<updated>2009-05-13T08:53:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=851#p851</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=849#p849"/>
			<content type="html"><![CDATA[A to przepraszam, warto trzymac tabelę z jednym id? W sensie z jedną kolumną]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-05-12T21:29:14Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=849#p849</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=848#p848"/>
			<content type="html"><![CDATA[no unikalny [b]nr_zwierzęcia[/b] który nie zlezy od gatunku.]]></content>
			<author>
				<name><![CDATA[dfs]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=903</uri>
			</author>
			<updated>2009-05-12T21:27:16Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=848#p848</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=847#p847"/>
			<content type="html"><![CDATA[Co w tym momencie przechowuje tabela zwierzęta, jeśli wszystkie cechy masz w tabelach zależnych?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-05-12T18:53:43Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=847#p847</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=846#p846"/>
			<content type="html"><![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ć?]]></content>
			<author>
				<name><![CDATA[dfs]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=903</uri>
			</author>
			<updated>2009-05-12T18:42:45Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=846#p846</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=843#p843"/>
			<content type="html"><![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?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-05-12T18:05:15Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=843#p843</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=842#p842"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[dfs]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=903</uri>
			</author>
			<updated>2009-05-12T17:30:46Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=842#p842</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=841#p841"/>
			<content type="html"><![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]]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-05-12T15:57:35Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=841#p841</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Wzajemnie wykluczające się użycje klucza obcego dla 3 różnych tabel.]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=840#p840"/>
			<content type="html"><![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ć??]]></content>
			<author>
				<name><![CDATA[dfs]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=903</uri>
			</author>
			<updated>2009-05-12T14:38:43Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=840#p840</id>
		</entry>
</feed>
