Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: relacja ...z dodatkowym ograniczeniem?
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
kufalo
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?
scanner
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.
prachwal
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
kufalo
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.
scanner
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.