Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> relacja ...z dodatkowym ograniczeniem?
kufalo
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 2
Dołączył: 24.08.2005

Ostrzeżenie: (0%)
-----


Witam,
Mam dwie tabele:

1) osoby: id, nazwisko, typ
1 kowalski nauczyciel
2 adamski uczen
3 nowak nauczyciel
4 socha uczen

2) dzienniki_lekcyjne: id, nazwa, id_nauczyciela
1 IVa 3

Tabele sa polaczone relacja pomiedzy polami: dzienniki_lekcyjne.id_nauczyciela <-> osoby.id
Problem w tym, ze baza nie pilnuje tego abysmy nie mogli jako id_nauczyciela wstawic identyfikator nalezacy do ucznia.
Czy da sie jakos z poziomu relacji to wymusic? ....A moze jakiegos coinstrainta dwutabelowego?
Nie mam pojecia jak sie do tego zabrac ...moze jest jeszcze jakis inny sposob?
Go to the top of the page
+Quote Post
scanner
post
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




A nie lepiej mieć osobne tabele z nauczycielami i uczniami?
Selekcja wtedy przychodzi naturalnie.
Nie wiem, czy MSSQL ma dziedziczenie tabel, ale gdyby to był PostgreSQL, to zrobiłbym zapewne tak, że tabele uczeń i nauczyciel dziedziczyłby po tabeli osoba. w tym momencie oczekiwana przez Ciebie selekcja "wyszłaby " w zasadzie naturalnie.
Go to the top of the page
+Quote Post
prachwal
post
Post #3





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

Ostrzeżenie: (0%)
-----


Cytat(kufalo @ 22.01.2010, 11:27:12 ) *
Czy da sie jakos z poziomu relacji to wymusic? ....A moze jakiegos coinstrainta dwutabelowego?
Nie mam pojecia jak sie do tego zabrac ...moze jest jeszcze jakis inny sposob?


trigger i jeżeli warunek nie będzie spełniony to robimy Rollback
Go to the top of the page
+Quote Post
kufalo
post
Post #4





Grupa: Zarejestrowani
Postów: 251
Pomógł: 2
Dołączył: 24.08.2005

Ostrzeżenie: (0%)
-----


Cytat
Nie wiem, czy MSSQL ma dziedziczenie tabel, ale gdyby to był PostgreSQL, to zrobiłbym zapewne tak, że tabele uczeń i nauczyciel dziedziczyłby po tabeli osoba.


A czy 'dziedziczenie tabel' to jakas specjalna funkcjonalnosc bazy??
Czy robi sie po poprostu relacje jeden do jednego pomiedzy polami:
osoby.id <-> nauczyciele.id
osoby.id <-> uczniowie.id
?

Cos jak drugi sposob stad:
http://kosciak.blox.pl/2007/11/Mapowanie-d...ych-bazach.html

Problemem jest jednak dodawanie danych poniewaz trzeba wstawiac w transakcji dane do dwoch tabel jednoczesnie...
Byc moze ten mechanizm w PostgreSQL zalatwia ta niedogodnosc?

Prawdopodobnie w MSSQL nie ma czego takiego jak dziedziczenie tabel.

Ten post edytował kufalo 22.01.2010, 15:41:54
Go to the top of the page
+Quote Post
scanner
post
Post #5





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Postgres ma coś takiego: http://www.postgresql.org/docs/8.4/static/ddl-inherit.html
Działa to (w uproszczeniu) analogicznie do dziedziczenia klas.

Jeśli MSSQL nie ma takiego mechanizmu, to jednym z rozwiązań jest napisać procedurę składowaną i BEFORE INSERT / BEFORE UPDATE sprawdzać, czy obiekt z user o podanym id ma odpowiednie atrybuty, jeśli nie to wywalać wyjątek bazy.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.06.2026 - 15:12