Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Baza danych Access 2007 -

marek0_00 09 Feb 2015 19:37 3096 6
  • #1
    marek0_00
    Level 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 -
  • #2
    mickpr
    Level 39  
    marek0_00 wrote:
    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 wrote:
    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.
  • #3
    marek0_00
    Level 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 ;)
  • #4
    mickpr
    Level 39  
    marek0_00 wrote:
    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 wrote:
    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"
    Code: sql
    Log in, to see the code
    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)
    Code: sql
    Log in, to see the code

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

    Teraz chcemy, sobie obliczyć średnie dla reszty uczniów.
    Code: sql
    Log in, to see the code

    Musi działać.

    marek0_00 wrote:
    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).
  • #5
    marek0_00
    Level 2  
    Porzuciłem pomysł na wielodostęp ;)
    mickpr wrote:
    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?
  • #6
    mickpr
    Level 39  
    Można ustalić, czy liczba ocen <, > lub równa jakiejś wartości i zbudować na tej podstawie kwerendę.
    Tak:
    Code: sql
    Log in, to see the code
  • #7
    marek0_00
    Level 2  
    Działa, dzięki za wszystko :)