Struktura bazy danych SQL Server

Struktura bazy danych SQL Server
lukaszek016
  • Rejestracja:około 9 lat
  • Ostatnio:ponad rok
  • Postów:249
0

Witam.

Proszę wybaczyć za nazwę tematu, ale nie mam pomysłu jak to w skrócie opisać. Chodzi o to, że mam problem jak zaprojektować strukturę tabel.

Założenie jest takie, że jest magazyn, w magazynie regały, na regałach półki, na półkach pojemniki, a w pojemnikach pozycje magazynu.
Zrobiłem tak, że mam tabelę WarehouseItem, gdzie mam klucz obcy do tabeli WarehouseContainer, gdzie z kolei mam klucz obcy do tabeli WarehouseShelf, a tam klucz obcy do tabeli WarehouseRack.
Teoretycznie działa to tak, jak powinno. Mam pozycje magazynowe przypisane do pojemnika, który jest przypisany jak wyżej opisałem. Mogę sobie listować pozycje magazynu z konkretnego regału, czy samego pojemnika.

Ale powiedzmy, że chcę umożliwić użytkownikowi w oprogramowaniu czy chce korzystać, z regałów, półek czy pojemników. Powiedzmy, że klient nie ma pojemników tylko towar trzyma bezpośrednio na półkach i wtedy moja struktura bazy już jest niepoprawna. Czy mogę prosić o sugestie jak można to optymalnie zaprojektować?

kate87
  • Rejestracja:około 15 lat
  • Ostatnio:około 3 lata
0

W każdej tabeli przydało by Ci się zrobić flagę czy klient trzyma swoje rzeczy na tym poziomie czy niżej i za każdym razem sprawdzać gdzie klient ma tę flagę.

lukaszek016
  • Rejestracja:około 9 lat
  • Ostatnio:ponad rok
  • Postów:249
0

Ok, czyli zrobić w każdej z tych tabel dodatkową kolumnę powiedzmy Flag?

Jeśli tak, to co w przypadku, kiedy klient nie ma żadnych opakowań, czyli w tabeli WarehouseContainers nie będzie żadnych wierszy? Ok, można sprawdzać, brak wierszy - nie wykorzystuje.

Ja kombinowałem również w kierunku, aby w pozycji magazynowej było id opakowania, półki i regału.

kate87
Akurat te id mogą być pomocne i potem nie będzie trzeba robić kilka razy joina. Jeśli klient nie będzie miał opakowań to nie będzie jego id w tabeli opisującej opakowania. Kolumna flag była by 1 tylko wtedy kiedy ktoś składował by rzeczy albo bezpośrednio na regale albo w podanym pudełku. Jeśli składował by rzeczy na regale ale w pudełku to wtedy regał 0, pudełko 1. Przy robieniu selecta po prostu porównujesz flagę i od razu wiesz gdzie się znajdują rzeczy usera.
CW
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:251
0

Kiedyś pisałem program do obsługi magazynu wysokiego składu i z tego co pamiętam najlepszym rozwiązaniem okazało się "odejście" od czystego relacyjnego modelu bazy danych. Zrób tabelę w której masz nr regału, półki i pojemnika i wygeneruj rekordy opisujące Twój magazyn (oczywiście w samym programie musi byc mechanizm pozwalający np. na zwiększenie liczy regałów czyli wygenerowanie nowych rekordów) - nie lubię takich rozwiązań, ale to okazało się najlepsze. Oczywiście w tej tabeli muszą być jakieś dodatkowe pola np. informacja czy pojemnik jest zajęty, do kiedy itp. i ID klienta. Jeżeli klient zajmuje cały regał np nr 3 to wtedy program wstawia ID clienta do wszystkich pojemników na danym regale.

edytowany 3x, ostatnio: cw
mariano901229
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Postów:597
1

No dobra, a nie lepiej stworzyć sobie dwie tabele
WarehouseLocations, która zawiera oczywiście id, kod lokalizacji, rodzic_id, poziomid
WarehouseLevels, która zawiera id, nazwę lokalizacji (w zasadzie to jak nie chcesz mieć nazw poziomów w odrębnej tabeli to wystarczy ta powyżej, ale być może będzie jakiś sens tej tabeli z poziomami).

Np dla magazynów wpis w WarehouseLocations to będzie

Kopiuj
Id, Kod lokalizacji, rodzicId, poziomid
1, Magazyn 1, null, 1

Dla tam regałów

Kopiuj
Id, Kod lokalizacji, rodzicId, poziomid
2, Regal 1, 1, 2

Dla tam kolejnego poziomu:

Kopiuj
Id, Kod lokalizacji, rodzicId, poziomid
3, Półka 1, 2,3 

W ten sposób masz strukturę chierarchczną. A w tabeli WarehouseLevels tworzysz sobie np.
Id, NazwaLokalizacji

Kopiuj
1, Magazyny
2 , Regały
3, Półki
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)