baza danych - biblioteka

0

Witam zaczynam bawić się z programowaniem baz danych i dla przykładu chce zrobić program do obsługi biblioteki, czy możecie mi powiedzieć czy ten znaleziony schemat jest ok czy jednak byście cos zmienili.
z góry dzięki
user image

1

Schemat wygląda na poprawny. Chyba tylko przyczepiłbym się do PK w tabeli Wypożyczenie, przecież czytelnik może wielokrotnie wypożyczać ten sam egzemplarz. Więc albo trzeba dodać sztuczny PK (idWypozyczenia), albo PK zrobić na idCzytelnika, idEgzemplarz, DataWypozyczenia, oczywiście jeśli DataWypozyczenia jest z dokładnością do części czasowej (milisekund) to nie powinno być problemu. Poza tym pewnie przydałoby się rozszerzyć niektóre tabele o więcej informacji, w szczególności Książka i Egzemplarz o informacje o wydaniu (pierwsze, drugie, ...), tłumaczeniu (jeśli to książka zagraniczna), czy o języku (możemy mieć nie tylko książki po polsku).

0

a powiedz mi jedno czy polecisz zrobić coś takiego w czytelniku było by pesel jako PK, polecisz takie rozwiązanie czy robić sztuczny klucz??
i pytanie nr 2 jak ksiązka ma kilku autorów to jak ten problem rozwiązać w bazie??

0

mógłbyś oddzielać autorów np 1|2|3 itp. Przecież książka nie ma Bóg wie ile autorów , żeby te zapytanie było obciążające. Albo można np na około obejść. Utworzyć tabele z autorami gdzie przechowujesz ich imiona itp itd. W drugiej tabeli przechowujesz id każdego autora i w której książce "maczał paluszki" :)

0

a możesz mi jeszcze powiedzieć jedno jak będę chciał przeglądać historię użytkownika co miał za książki itd, albo na odwrót, książka przez kogo była wypożyczana, musze robić dodatkowe tabele jakieś czy dam rady z tego wydobyć?

0

tabela wypożyczenia będzie taką główną tabelą. Jeżeli odpowiednio ułożysz zapytania to wyciągniesz z niej wszystko i połączysz z danymi z innych tabel :)

0

Jeśli chodzi o unikalność PESEL, to kilku ludzi z forum gdzieś pisało o przypadkach z życia, jak to się nacięli na takie założenia. Teoretycznie PESEL został zaprojektowany jako nr unikalny, ale życie (czyt. urzędnicy) potrafią zepsuć najznakomitszy plan.
Odp na pytanie nr 2: masz to już w tej bazie przewidziane. Masz połącznie wiele-do-wielu między Książka a Autor, zrealizowane przez tabelę pośrednią Ksiazka_Autor.

Cała historia wypożyczeń to właśnie tabela Wypozyczenia. Odpowiednie select z złączeniami i filtrami da ci historią dla czytelinika lub książki/egzemplarza.

0

a jeśli chodzi o baze danych robie w postgre, tam ogółem co mam robić tylko klucz obcy w tabeli i nie mam możliwości stworzenia czegoś takiego rjak rodzaj połączenia zgadza się??

0

zacząłem już pisać aplikacje i mam do Was pytanie.
w dataGrindView mam ustawioną akcjęSelectionChanged że wczytuje do textBoxów poszczególne dane z tabeli, ale gdy np wyszukuje jakiś wyraz który nie występuje w bazie to mi wywala errora że odwolanie do obiektu nie zostało ustawione na lini gdzie mam
DataRowView SelRow;
SelRow = (DataRowView)(bindingSource1.Current);
if (SelRow[0] == ) { lWPesel.Text = "-"; } else { lWPesel.Text = SelRow[0].ToString(); }

powie mi ktoś co mam z tym zrobic??

0

Nie wiem jak wyszukujesz. Ale pewnie metoda wyszukująca zwraca null lub pustą tablicę, a ty próbujesz odwołać się do czegoś czego nie ma. Najpierw trzeba sprawdzić czy cokolwiek zostało znalezione.

0
selectcomm1 = new NpgsqlCommand("select * from czytelnicy WHERE nazwisko=@nazwisko", connection);
                    selectcomm1.Parameters.Clear();
                    selectcomm1.Parameters.Add("@nazwisko", tbWprowadz.Text);
                    refresh1();


  public void refresh1()
        {
            ds = new DataSet("Czytelnicy");
            adapter.SelectCommand = selectcomm1;
            adapter.Fill(ds);
            bindingSource1.DataSource = ds;
            bindingSource1.DataMember = ds.Tables[0].TableName;
            dataGridView1.DataSource = bindingSource1;
        }

 DataRowView SelRow;
            SelRow = (DataRowView) (bindingSource1.Current);
           if (SelRow[0] == "" ) { lWPesel.Text = "-"; } else { lWPesel.Text = SelRow[0].ToString(); }
            if (SelRow[1] == "") { lWImie.Text = "-"; } else { lWImie.Text = SelRow[1].ToString(); } 

jeśli możesz to napisz jak sprawdzić to

0

Witam mam kilka pytań co do operacji poprzez okno programu C# co do bazy

  1. Jak mam rozpoznać czy select mi nie zwrócił pustego wyniku -> na chwile obecną jak wyszukuje coś czego nie ma w bazie dostaje errora.

  2. Jak zrobić coś takiego że jeśli w bazie mam np książkę o tytule xxx i próbująć wstawić poniownie taki tytuł żeby mi pokazało komunikat że taki tytuł już istnieje??

  3. Jak wczytuje do combo boxa table autor w której posiadam id_autora,imie,nazwisko jak wczytać imie i nazwisko do comboboxa i żeby przy wyborze danego autora wrzuciło mi do innej tabeli poprawnego autora??

z góry dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1