Reklama
Szukaj zleceń na Getak.pl

Stwórz profil

Musisz wpisać swoje imię
Musisz wpisać swoje nazwisko
Musisz wpisać poprawny e-mail
Musisz wpisać hasło (min. 8 znaków)
Musisz zaakceptować regulamin

Temat: Jak sprawdzić relacje?

Witam.
Jako, że jestem zielony z MS SQL Server, dlatego mam nadzieję, że w miarę zrozumiale opiszę problem.

Pewien program tworzy bazę danych w ms sql server 2008. Ma ona wiele tabeli z pewnymi relacjami.

Czy jest możliwość zaznaczyć w Management Studio 2 tabele i zobaczyć po jakim polu mają one relacje?
20.10.2011, 14:03

Damian Skrzypczak Administrator
Hurtowni Danych, Dom
Maklerski BZ WBK
S.A.

Temat: Jak sprawdzić relacje?

Witam,

Można to zrealizować za pomocą poniższego skryptu:

SELECT
K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
and PK.TABLE_NAME = '<nazwa_pierwszej_tabeli>'
and FK.TABLE_NAME = '<nazwa_drugiej_tabeli>'

Wpisujesz jedynie poprawne nazwy tabel na końcu skryptu (<nazwa_pierwszej_tabeli>, <nazwa_drugiej_tabeli>)

Pozdrawiam
20.10.2011, 14:19

Temat: Jak sprawdzić relacje?

Dzięki.

Ale pojawiły się laickie schody ;-).

W MS otworzyłem Object Explorera -> Databases.
Zaznaczyłem myszką bazę, którą chciałem sprawdzić i pod menu wybrałem "New Query".

Pod query pojawiło mi się, że query connected moim loginem do bazy którą wybrałem. Git.

Powiedzmy DB ma nazwe AAA
Mam w niej 2 tabele

User.Products
User.Orders

Jak kliknę prawym na dowolną tabelę to Name = Products, Schema = User.

I teraz próbowałem na 3 sposoby:
1.
and PK.TABLE_NAME = 'Products'
and FK.TABLE_NAME = 'Orders'

2.
and PK.TABLE_NAME = 'User.Products'
and FK.TABLE_NAME = 'User.Orders'

3.
and PK.TABLE_NAME = 'AAA.User.Products'
and FK.TABLE_NAME = 'AAA.User.Orders'


I każde zapytanie daje wynik pusty, a na 100% wiem, że jest relacja między nimi :(.

Co robię źle?Maciej Popławski edytował(a) ten post dnia 20.10.11 o godzinie 14:36
20.10.2011, 14:36

Marek Hoć mobIT.pl -
oprogramowanie dla
biznesu i nie tylko;
system...

Temat: Jak sprawdzić relacje?

Jeśli dobrze rozumiem, to:
1. prawoklik na tabeli Orders
2. wybierasz Design
3. na pasku w górnym menu (zależy jak ktoś ułoży) wybierasz ikonkę 'Relationships' (ew. z menu Table Designer -> Relationships..)
4. po lewej stronie pokażą się relacje
5. zaznaczasz szukaną i po prawej stronie będziesz miał szczegóły w polu 'Tables And Columns Specification'
20.10.2011, 14:55

Adrian Olszewski Projektant iMed24
SA, Biostatystyk

Temat: Jak sprawdzić relacje?

Spróbuj może tak:
1.
Obrazek

2. Spróbuj poniższego skryptu:
SELECT	OBJECT_NAME(FKeys.constid) AS Relacja,
PKcols.name AS "Rodzic: kolumna PK",
FKcols.name AS "Dziecko: kolumna FK"
FROM sys.sysforeignkeys FKeys
INNER JOIN sys.syscolumns FKcols ON (FKeys.fkeyid = FKcols.id
AND FKeys.fkey = FKcols.colid )
INNER JOIN sys.syscolumns PKcols ON (FKeys.rkeyid = PKcols.id
AND FKeys.rkey = PKcols.colid)
WHERE OBJECT_NAME(FKeys.rkeyid) = 'Pacjent'
AND OBJECT_NAME(FKeys.fkeyid) = 'Adres'


Na zrzucie poniżej także druga wersja, wyświetlająca wszystkie tabele i ich "dzieci".


Obrazek


-----------
EDIT: odzew jak zwykle błyskawiczny :) Za czas tworzenia przykładu już tyle odpowiedzi. Nic nowego raczej nie wniosłem, ale chciałem dobrze :)Adrian Olszewski edytował(a) ten post dnia 20.10.11 o godzinie 15:06
20.10.2011, 15:03

Damian Skrzypczak Administrator
Hurtowni Danych, Dom
Maklerski BZ WBK
S.A.

Temat: Jak sprawdzić relacje?

1 sposób wyboru jest poprawny... może w złej kolejności podałeś tabele.

Odpal zapytanie bez 2 ostatnich warunków tzn.
and PK.TABLE_NAME = '<nazwa_pierwszej_tabeli>'
and FK.TABLE_NAME = '<nazwa_drugiej_tabeli>'

Otrzymasz informacje o wszystkich relacjach w danej bazie.Damian Skrzypczak edytował(a) ten post dnia 20.10.11 o godzinie 15:24
20.10.2011, 15:15

Szymon P. Trzymać życia
rytm, a nie szarpać
się z nim

Temat: Jak sprawdzić relacje?

Adrian Olszewski:
EDIT: odzew jak zwykle błyskawiczny :) Za czas tworzenia przykładu już tyle odpowiedzi.

To chyba dobrze, no nie ? Szybciej niż na msdn'ie
20.10.2011, 16:22

Paweł Kruk QAD Polska

Temat: Jak sprawdzić relacje?

O ile dobrze pamiętam to można zobaczyć relacje przedstawione na diagramie graficznie. Wygeneruj sobie nowy diagram:
- z folderu Database Diagrams -> New Database Diagram
- następnie w komunikacie potwierdź: Yes
- pojawi się okno z listą tabel (zaznacz te, których relacje chcesz zobaczyć i kliknij: Add).
20.10.2011, 22:10

Temat: Jak sprawdzić relacje?

O jezu, wracam do pracy, a tu tyle pomysłów :-).

Dziękuję wszystkim za pomoc. Jak tylko się ogarnę ze standardową robotą, to posprawdzam i dam feedback, co i jak.
21.10.2011, 08:09

Temat: Jak sprawdzić relacje?

Damian Skrzypczak:
1 sposób wyboru jest poprawny... może w złej kolejności podałeś tabele.

Odpal zapytanie bez 2 ostatnich warunków tzn.
and PK.TABLE_NAME = '<nazwa_pierwszej_tabeli>'
and FK.TABLE_NAME = '<nazwa_drugiej_tabeli>'

Otrzymasz informacje o wszystkich relacjach w danej bazie.

Rzeczywiście działa. Przepraszam. Twórca bazy danych na 100% był przekonany, że jest relacja w bazach, które jej nie miały....

Po sprawdzeniu sposobem Pana Marka:
Marek Hoć:
Jeśli dobrze rozumiem, to:
1. prawoklik na tabeli Orders
2. wybierasz Design
3. na pasku w górnym menu (zależy jak ktoś ułoży) wybierasz ikonkę 'Relationships' (ew. z menu Table Designer -> Relationships..)
4. po lewej stronie pokażą się relacje
5. zaznaczasz szukaną i po prawej stronie będziesz miał szczegóły w polu 'Tables And Columns Specification'

Okazało się, że i ten i ten sposób działa.

Dziękuję wam.

A co do:
Paweł Kruk:
O ile dobrze pamiętam to można zobaczyć relacje przedstawione na diagramie graficznie. Wygeneruj sobie nowy diagram:
- z folderu Database Diagrams -> New Database Diagram
- następnie w komunikacie potwierdź: Yes
- pojawi się okno z listą tabel (zaznacz te, których relacje chcesz zobaczyć i kliknij: Add).

To niestety jak klikam, to pojawia mi się:

Obrazek


Trudno, ważne, że tamte działają.

Jeszcze raz dzięki wszystkim za pomoc.Maciej Popławski edytował(a) ten post dnia 21.10.11 o godzinie 12:30
21.10.2011, 12:29

Paweł Kruk QAD Polska

Temat: Jak sprawdzić relacje?

Wygląda na to, że nie masz na swoim loginie wystarczających uprawnień do utworzenia diagramu relacji lub może masz wersję Express bazy MS SQL Server.


A co do:
Paweł Kruk:
O ile dobrze pamiętam to można zobaczyć relacje przedstawione na diagramie graficznie. Wygeneruj sobie nowy diagram:
- z folderu Database Diagrams -> New Database Diagram
- następnie w komunikacie potwierdź: Yes
- pojawi się okno z listą tabel (zaznacz te, których relacje chcesz zobaczyć i kliknij: Add).

To niestety jak klikam, to pojawia mi się:

Obrazek


Trudno, ważne, że tamte działają.

Jeszcze raz dzięki wszystkim za pomoc.
21.10.2011, 18:59

Adrian Olszewski Projektant iMed24
SA, Biostatystyk

Temat: Jak sprawdzić relacje?

Express bez problemu pozwala tworzyć diagramy. Zapewne kwestia uprawnień.
22.10.2011, 02:03

Marek Zając Pasjonat programista
.NET

Temat: Jak sprawdzić relacje?

Maciej Popławski:
A co do:
Paweł Kruk:
O ile dobrze pamiętam to można zobaczyć relacje przedstawione na diagramie graficznie. Wygeneruj sobie nowy diagram:
- z folderu Database Diagrams -> New Database Diagram
- następnie w komunikacie potwierdź: Yes
- pojawi się okno z listą tabel (zaznacz te, których relacje chcesz zobaczyć i kliknij: Add).

To niestety jak klikam, to pojawia mi się:

Obrazek

Zrób tak

EXEC sp_dbcmptlevel 'baza', '90';
GO
ALTER AUTHORIZATION ON DATABASE::baza TO "sa"
GO
USE baza
GO
EXECUTE AS USER = N'dbo' REVERT
GO
22.10.2011, 07:52

Temat: Jak sprawdzić relacje?

W pracy jest MS SQL Server 2008. A uprawnień nie mam pełnych do niego, ponieważ niestety nie do każdej bazy mogę mieć admina.
Jeżeli powiecie mi jak sprawdzić, to przekażę jakie mam uprawnienia ;)
Marek Zając:
Zrób tak

EXEC sp_dbcmptlevel 'baza', '90';
GO
ALTER AUTHORIZATION ON DATABASE::baza TO "sa"
GO
USE baza
GO
EXECUTE AS USER = N'dbo' REVERT
GO

A co robi ten kod?Maciej Popławski edytował(a) ten post dnia 24.10.11 o godzinie 07:05
24.10.2011, 07:05

Szymon P. Trzymać życia
rytm, a nie szarpać
się z nim

Temat: Jak sprawdzić relacje?

Baza nie ma ustawionego ownera ito jest podowem, że nie mozesz stworzyc diagramu.

Skoro nie masz uprawnień, żeby to zmienić w properties poproś admina servera
28.10.2011, 18:40

Adrian Olszewski Projektant iMed24
SA, Biostatystyk

Temat: Jak sprawdzić relacje?

Wątek już wiekowy, ale właśnie sobie coś przypomniałem...

"Gdy z ust kogoś z wykształceniem informatycznym padają słowa "relacje łączące tabele", w Chinach umiera mała panda" :)

Związki.

Relacjami są tabele. To z nimi jest ta cała zabawa w algebrę relacji i te nudne wzory znane z wykładów, selekcje, projekcje...

Chociaż wiem, że samego mnie język świerzbi (bo "A i B są w relacji wiele do wiele...") :] Ale piszę to dlatego, że niedawno syn znajomego oblał ustny z baz danych zanim jeszcze dokończył zdanie... To był najszybsze "dziękuję, zapraszam na drugą rundę" i zarazem najkrótszy egzamin w jego życiu.

Ale co poradzić, skoro nawet Microsoft...., a Internet aż kipi od tego. A to nie jest tylko "czepialstwo" językowe, bo potem kupa ludzi, nawet po IT nie wie, co jest relacją w modelu relacyjnym i zaczyna gadkę o "relacjach między tabelami".

A Codd się w grobie przewraca.Adrian Olszewski edytował(a) ten post dnia 20.02.12 o godzinie 13:16
20.02.2012, 13:02

Rafał Ziółkowski Swiss Army Knife

Temat: Jak sprawdzić relacje?

Adrian, ja sadze ze jak zwykle namieszalo tlumaczenie "jasia" z angielskiego na polski:

Relationships = Zwiazki, co ewoluowalo do Relacje.

Podobna sytuacja jest w prawie autorskim: Wiekszosc polskich "prawnikow" jest przekonana ze jezeli masz prawo do posiada jednej kopii np.: plyty CD to oznacza ze mozesz sobie takowa skopiowac... otoz blad: angielskie Copy = Egzemplarz ktore tlumacz "jasio" przetlumaczyl ma Kopie.

--- Off top ---
Jakis czas temu slyszalem w sklepie z grami kolesie gadali cos o lokacjach - no comment.
--- Koniec off top ---

Ludzie na codzien uzywaja i nie widza roznicy miedzy metodologia zarzadzania a metodyka zarzadzania. A pandy i tak wymra jako gatunek nie przystosowany - smutne ale prawdziwe.

Disclaimer:
Nie mam nic do imienia Jasiu, wystepuje ono tu jako przyklad. Moj wujek ma na imie Jasiu i bardzo go lubie.
20.02.2012, 14:10

Adrian Olszewski Projektant iMed24
SA, Biostatystyk

Temat: Jak sprawdzić relacje?

Tym bardziej, że "relacje" od razu skojarzyły się z "relacyjnym modelem danych"... Związki? Aaaa, znaczy się relacje? No jasssne, przecież to model relacyjny! Wszystko pasuje...

Wiem, że to mało sensowna walka z wiatrakami, ale na GL jest coraz więcej studentów szukających odpowiedzi na różne pytania z egzaminów i prac domowych. Może kiedyś trafią na ten wątek i oszczędzą sobie powtórki z rozrywki...

Ale żeby nie było, że ja taki "święty"... :) piszę akurat na potrzeby mojego, powstającego właśnie, serwisu króciutki wpis o modelu relacyjnym (językiem laika, bo to dla lekarzy i badaczy). Co chwila łapię się na tym, że kusi mnie napisać "relacja", ale nie chcę uczyć ludzi błędnego użycia tego terminu.
20.02.2012, 14:18

Piotr B. Handlarz też
człowiek

Temat: Jak sprawdzić relacje?

Może Toad for SQL Server lub Toad Data Modeler?
13.03.2012, 23:20

Adam O. Bazy danych etc

Temat: Jak sprawdzić relacje?

Co chwila łapię się na tym, że kusi mnie napisać "relacja", ale nie chcę uczyć ludzi błędnego użycia tego terminu.

Synowi Twojego znajomego przekaż kondolencje z powodu posiadania takiego pseudowykładowcy. Większość ludzi popełnia ten "błąd" (łącznie z niżej podpisanym), więc najwidoczniej to już przestało być błędem a zaczęło być uzusem językowym, a być może i akceptowalną formą. Język jest materią żywą, bez względu na opinię jakiegoś fanatycznego pracownika naukowego. Jeżeli ktoś wie "o co chodzi" to nie powinien być karany za użycie niewłaściwego słowa. Jak ktoś wie co to klucz główny, klucz obcy i jak się ma jedno do drugiego to już jest fajnie. Jak jeszcze potrafi to zaimplementować w jakimkolwiek silniku baz danych to jedyne co wykładowca powinien w takiej sytuacji zrobić, to kulturalnie wytłumaczyć że słownictwo użyte jest złe. I wstawić 5.0 ;)

Ale tradycyjnie już realia polskich uczelni do realiów przedsiębiorstw violate'ują constraina jakiegokolwiek reliationshipu :P

Czekam na flejma ze strony wściekłych pracowników naukowych;)
16.03.2012, 16:05



Wyślij zaproszenie do