Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Baza danych Access 2007 -

marek0_00 09 Lut 2015 19:37 2082 6
  • #1 09 Lut 2015 19:37
    marek0_00
    Poziom 2  

    Witam wszystkich serdecznie! ;)
    Mam następujący problem. Tworzę prostą bazę danych, której celem jest ocenianie studentów w ramach zakończonego semestru. Wstawiam jej model relacyjny. Mam następujące problemy.1. Chciałbym, aby dany wykładowca miał uprawnienia do wystawiania ocen tylko z danego przedmiotu, którego naucza. Czy można to zrealizować za pomocą nowej tabeli np. uprawnienia? I jak to ew. zrobić?
    2.Ponadto baza ma za zadanie liczyć również średnią ocen studentów na podstawie której zostaną przydzielone stypendia, przy czym student który otrzymał ocenę 2 w pierwszym terminem, mimo odpowiedniej średniej ocen, nie powinien otrzymać stypendia.
    Jest to moja pierwsza styczności z bazami danych, proszę o wyrozumiałość ;)
    Dziękuję za pomoc :) Baza danych Access 2007 -

    0 6
  • #2 09 Lut 2015 21:22
    mickpr
    Poziom 39  

    marek0_00 napisał:
    1. Chciałbym, aby dany wykładowca miał uprawnienia do wystawiania ocen tylko z danego przedmiotu, którego naucza. Czy można to zrealizować za pomocą nowej tabeli np. uprawnienia? I jak to ew. zrobić?
    Domniemywam, że nie chodzi ci o stricte "uprawnienia bazodanowe", a raczej o koncepcję SQL-ową.
    W takim przypadku : stwórz tabelę "nauczyciele_przedmioty" - przechowującą informacje o tym, jaki przedmiot naucza dany nauczyciel i ... po kłopocie.
    Dla danego nauczyciela będziesz miał możliwość wyboru tylko tych przedmiotów, jakich on naucza.

    marek0_00 napisał:
    2.Ponadto baza ma za zadanie liczyć również średnią ocen studentów na podstawie której zostaną przydzielone stypendia, przy czym student który otrzymał ocenę 2 w pierwszym terminem, mimo odpowiedniej średniej ocen, nie powinien otrzymać stypendia.

    Zrób widok (kwerendę) uczniów, którzy nie mają oceny "2" w pierwszym terminie. (WHERE ocena_w_pierwszym_terminie <>2, grupowanie po ID z tabeli uczniowie) i tylko dla nich obliczaj potem średnią.

    Mała rada na przyszłość - poznaj SQL. Nie jest trudny, a na pewno się przyda.
    Da się nim zrobić o wiele więcej niż wizualnym kreatorem kwerend.

    0
  • #3 09 Lut 2015 22:50
    marek0_00
    Poziom 2  

    Dzięki za rady! ;)
    1. Powiedzmy, że z bazy danych będzie korzystać wielu wykładowców. Czy byłaby możliwość zrobienia tego tak, aby jeden użytkownik bazy nie miał dostępu do wystawiania ocen "w imieniu" innych użytkowników?
    2. Niestety nie działa. Ponieważ moja baza jest tak skonstruowana, że podając warunek <>2 dane zostają przefiltrowane i średnia jest liczona z ocen ale już bez oceny 2. Każde wystawienie oceny jest w tej bazie oddzielnym "zjawiskiem" (tabela ocenianie). Czy nie powinien poprawić jakoś właśnie tego elementu? Czy może dałoby się najpierw obliczyć średnią, a następnie przefiltrować wg <>2. Niestety próbuję i nic nie wychodzi.
    Odnośnie konstrukcji bazy i tabeli ocenianie. Jest tak, że można z danego przedmiotu wystawić kilka ocen. Chciałbym aby to nie było możliwe. Dziękuję za każdą pomoc ;)

    0
  • #4 10 Lut 2015 00:05
    mickpr
    Poziom 39  

    marek0_00 napisał:
    1. Powiedzmy, że z bazy danych będzie korzystać wielu wykładowców. Czy byłaby możliwość zrobienia tego tak, aby jeden użytkownik bazy nie miał dostępu do wystawiania ocen "w imieniu" innych użytkowników?
    W jaki sposób będzie realizowany wielodostęp? MSAccess się do tego celu IMHO nie nadaje.
    W jaki sposób zrealizować to na bazie SQL-owej (SQL Server, MySQL itd?):
    1. formularz logowania -> zapamiętanie ID użytkownika
    2. formatki i kwerendy -> wykorzystanie ID użytkownika

    marek0_00 napisał:
    Niestety nie działa. Ponieważ moja baza jest tak skonstruowana, że podając warunek <>2 dane zostają przefiltrowane i średnia jest liczona z ocen ale już bez oceny 2. Każde wystawienie oceny jest w tej bazie oddzielnym "zjawiskiem" (tabela ocenianie). Czy nie powinien poprawić jakoś właśnie tego elementu? Czy może dałoby się najpierw obliczyć średnią, a następnie przefiltrować wg <>2. Niestety próbuję i nic nie wychodzi.

    No to podejdźmy po kolei do tematu:
    Załóżmy, ze masz tabelę OCENIANIE (wiele wierszy na jednego użytkownika) z ocenami. Załóżmy że są pola:
    - uczen_id (id ucznia)
    - ocena (ocena)
    - data.... i inne pola
    Robisz sobie kwerendę "CI_CO_ODPADLI"
    Kod: sql
    Zaloguj się, aby zobaczyć kod
    Daje ci to widok (tabelę wirtualną) uczniów, którzy w pierwszym terminie dostali pałę.

    To teraz robimy tych, co nie dostali pały(ZDALI)
    Kod: sql
    Zaloguj się, aby zobaczyć kod

    (Tabela UCZNIOWIE to tabela z niepowtarzającymi się uczniami).

    Teraz chcemy, sobie obliczyć średnie dla reszty uczniów.
    Kod: sql
    Zaloguj się, aby zobaczyć kod

    Musi działać.

    marek0_00 napisał:
    Odnośnie konstrukcji bazy i tabeli ocenianie. Jest tak, że można z danego przedmiotu wystawić kilka ocen. Chciałbym aby to nie było możliwe.
    Z poziomu SQL nie da się tego elegancko zrobić (albo ja nie wiem jak ;) ).
    Da się zrobić z bardzo prosto poziomu programu:
    Przed wstawieniem oceny najpierw sprawdzasz czy ocena istnieje.
    - Jeśli nie - to ją wstawiasz.
    - Jeśli istnieje - to sygnalizujesz błąd.

    Dużą część programu można zrzucić na barki bazy SQL-owej, ale niektórych elementów się po prostu nie da.
    Porządna baza SQL ma mechanizmy takie jak procedury, funkcje, wyzwalacze itd... ułatwiające tworzenie systemów bazodanowych. Warto je poznać aby nie kończyć edukacji bazodanowych na MsAccess (który jest porządnym narzędziem, ale bardziej do prac doraźnych i prostych baz danych).

    0
  • #5 10 Lut 2015 12:12
    marek0_00
    Poziom 2  

    Porzuciłem pomysł na wielodostęp ;)

    mickpr napisał:
    Musi działać.

    Tak też jest, dzięki wielkie. :)
    Mam jeszcze jedno pytanie. Czy można coś zrobić, aby uczniom bez kompletu ocen nie była liczona średnia? Tzn, aby nie była liczona na podstawie np 2 ocen tylko. Czy jak napisałeś trzeba to robić z poziomu programu?

    0
  • #6 10 Lut 2015 13:15
    mickpr
    Poziom 39  

    Można ustalić, czy liczba ocen <, > lub równa jakiejś wartości i zbudować na tej podstawie kwerendę.
    Tak:

    Kod: sql
    Zaloguj się, aby zobaczyć kod

    0
  • #7 11 Lut 2015 16:28
    marek0_00
    Poziom 2  

    Działa, dzięki za wszystko :)

    0