![]() ![]() |
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? |
|
|
|
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. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 171 Pomógł: 18 Dołączył: 13.03.2009 Skąd: lublin Ostrzeżenie: (0%)
|
|
|
|
|
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 |
|
|
|
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. |
|
|
|
![]() ![]() |
|
Aktualny czas: 13.06.2026 - 17:32 |