Wpis z mikrobloga

Cześć Mirko,
Robię bazę danych apteki na projekt, pierwszy raz mam z tym styczność i potrzebuje waszej pomocy.
Projekt nie musi być rozbudowany, taka ilość encji i relacji wystarczy. Tylko mam pytanie czy to ma jakiś sens, ewentualnie co mogę zmienić.

Wiem, że


Ale dopiero się uczę ( ͡° ʖ̯ ͡°)

#bazydanych #programowanie #sqlserver #sql
buzonek - Cześć Mirko,
Robię bazę danych apteki na projekt, pierwszy raz mam z tym s...

źródło: comment_zGtyT4PjPULzVnRHJE1AFEldlbVLfSzu.jpg

Pobierz
  • 34
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@TomaszWKS Dzięki za uwagi, poprawię, opiszę i zawołam.

A tak odnośnie punktu 2. Zakupi, ale tylko bez recepty. Swoją drogą, na prawdziwej recepcie też jest pesel. Czy to oznacza, że obcokrajowiec nie może jej zrealizować?
  • Odpowiedz
@buzonek: Dyskusja jest akademicka, o dobrych praktykach, bo tak jak mówisz, nie będzie to nigdzie wdrażane, ale PESEL nie powinien być kluczem. Rekord z receptą ma się odłożyć, jak wprowadzi go aptekarz, powiedzmy, że przy wprowadzaniu źle odczytał PESEL i chce go później poprawić, nie może to powodować zmiany klucza !
Z tym recepta i bez recepty, trochę mnie przekonałeś, mogła by być tabela Transakcje, gdzie rejestrujemy to co w
  • Odpowiedz
@cevilo: @buzonek:
Wydaje mi się tak na szybko, że ja zrobiłbym to tak:
1. tabela z rolami - sprzedawca, lekarz, pacjent - oraz id roli
2. tabela z osobami - id osoby, id roli, dane tych osób (imię, nazwisko itd.)
3. tabela z kontrahentami - id kontrahenta, id recepty, id osoby

Nazwy tabel są dyskusyjne ale nie chce mi się wymyślać. Z projektami studenckimi jest taki problem, że
  • Odpowiedz
@buzonek:
1. Nazwy tabel to powinny być liczbą mnogą, za to pola tabeli pojedyncza
2. W tabeli PK powinno być samo ID - bez dodatkowej nazwy tabeli. Dodając nazwę tabeli sugerujesz, że to FK
3. Tabela listaleków jest zbędna. Brakujące parametry jak np pole czynarecepte (bool) można przenieść do tabeli Leki
4. Do czego odnosi się pole Ilość w tabeli Leki? Jeśli do ilości leku w sensie 4 tabletki, 300
  • Odpowiedz
2. W tabeli PK powinno być samo ID - bez dodatkowej nazwy tabeli. Dodając nazwę tabeli sugerujesz, że to FK


@Nartenlener: Nie prawda. Nie wiem jak na SQL Server ale np. na Oraclu jak by w każdej tabeli klucz główny nazywał się ID to później przy joinach w selectach trzeba by za każdym razem pisać aliasy bo nie wiadomo do której tabeli to id się odnosi. Aczkolwiek klucz główny i
  • Odpowiedz
@TomaszWKS: Nie powiesz mi chyba, że robisz jony nie używając aliasów? Pewnie, na 2. - 3. tabelach się da, ale jak robię w pracy analizę i joinuje do siebie 20 - 30 tabel + jakieś podzapytania to nie ma szans, aby jakieś pole się nie powtarzało - choćby DATE. Zresztą jak się uczyć to lepiej od początku pisać porządnie, a wg mnie aliasy nawet na prostych selektach to bardzo przydatne
  • Odpowiedz
@Nartenlener: Dlatego można użyć takiej sztuczki przy projektowaniu bazy, że wszystkie kolumny w danej tabeli będą miały taki sam prefiks. Np. dla tabeli producenci: prod id, prod nazwa. Dla leki: lek id, lek prod id, lek nazwa. I już w ogóle nie trzeba się przejmować aliasami (chyba, że chcesz zrobić "select alias.* ...").

SELECT lek nazwa FROM leki JOIN producenci ON prod id = lek prod id where prod nazwa
  • Odpowiedz
@TomaszWKS: chyba nie ma nic bardziej irytującego, niż powtarzanie 10 razy "prod" przy kolumnach, zamiast swojego aliasu np "p.", o jak ja nie trawię takich rozwiązań :P

a na koniec się okazuje, że takie "prod
id" i tak występuje w kilku tabelach, więc kończysz z p.prod _id i całe prefiksowanie na marne...

W sensie: jaka jest wartość dodana narzucania prefiksu w formie identyfikacji tabeli w nazwach kolumn, skoro i
  • Odpowiedz
chyba nie ma nic bardziej irytującego, niż powtarzanie 10 razy "prod_" przy kolumnach, zamiast swojego aliasu np "p.", o jak ja nie trawię takich rozwiązań :P


@Luxik: Lepiej jak ktoś inny przygotowywał selecta pół roku temu i poustawiał swoje debilne aliasy typu "a.", "b.", "c." i później musisz się zastanawiać z której tabeli ta wartość pochodzi i całe zapytanie analizować? Takie rozwiązanie wymusza stosowanie przez wszystkich programistów tego samego aliasu
  • Odpowiedz
@TomaszWKS: kwestia tego do czego służą zapytania i jak często chcecie je zmieniać. Zasadniczo możesz zrobić sobie ctrl f "as p" i sprawdzić, chyba wciąż wolę to niż przy każdym zapytaniu, nawet na własne potrzeby, wpisywać prefiksy.

Z resztą jak siadasz do czyjegoś zapytania i tak trzeba przez całe przebrnąć żeby zrozumieć co autor miał na myśli. Ale rozumiem, różne podejścia, może po prostu żadne nie jest lepsze od tego
  • Odpowiedz
@TomaszWKS: Można, ale po co skoro projekt będzie niezgodny z tym co masz w bazie? Aliasy to nie tylko pomoc przy odnoszeniu się do konkretnego pola w konkretnej tabeli, ale również pozwala na odróżnienie zmiennej lokalnej. Podałeś jeden prosty przykład do którego aliasy są niepotrzebne, ale tak jak pisałem nie wyobrażam sobie pisania execut blocków czy procedur bez aliasów - jest to praktycznie niewykonalne z powodu kompletnej braku czytelności kodu
  • Odpowiedz
Tak z ciekawości, jak sobie radzicie w pracy tylko z prafiksami łącząc np tabele po tym samym kluczu np prac_id, albo łączysz pracowników z pracownikami bo chcesz mieć listę podwładnych i przełożonych? Przecież to jest praktycznie niewykonalne bez aliasów?


@Nartenlener: Owszem, łącząc tabelę z samą sobą aliasy są potrzebne. Jest to jeden z dwóch przypadków, w których mam potrzebę używania aliasów i tak na szybko przychodzą mi do głowy. Drugi
  • Odpowiedz