• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem przy projektowaniu bazy danych

Object Storage Arubacloud
0 głosów
196 wizyt
pytanie zadane 12 kwietnia 2022 w SQL, bazy danych przez CdxProj Użytkownik (910 p.)
Hej. Piszę z takim pytankiem. Chciałbym sobie zaprojektować bazę danych, baza będzie posiadała między innymi tabele [Restauracja] oraz [Adres]. W tabeli [Restauracja] mam między innymi następujące pola: id, adres_id, typ, w tabeli [Adres] mam między innymi następujące pola: id, restauracja_id, kraj, ulica, kod pocztowy itd. Adres oraz Restauracja są w relacji 1:1. I chciałbym dodać teraz kolejną tabelę [Mieszkanie] która też będzie zawierała adres, struktura tego adresu będzie identyczna jak przy adresie do restauracji. Co mogę zrobić? Czy do [Mieszkanie] muszę tworzyć osobną tabelę z adresem?

1 odpowiedź

0 głosów
odpowiedź 12 kwietnia 2022 przez edutomek Dyskutant (8,380 p.)
Przez tę kolumnę restauracja_id w tabeli z adresami jest problem, no i zaczyna się wymyślanie, czy potrzeba osobnej tabeli z adresami dla mieszkań. A jak za chwilę wprowadzimy jeszcze np. sklepy, to dopiero zrobi się zamieszanie.

Tak naprawdę są trzy encje: restauracja, mieszkanie i adres - i każda z nich powinna być w osobnej tabeli.

Jeśli każda restauracja ma dokładnie jeden adres, oraz każde mieszkanie ma mieć jeden adres, to w tabeli [Adres] nie powinno być ani restauracja_id, ani mieszkanie_id. Za to w tabelach [Restauracja] i [Mieszkanie] powinny być kolumny adres_id. Przy zapytaniu o dane restauracji będzie można połączyć rekordy z tabeli [Restauracja] z odpowiadającymi im rekordami z tabeli [Adres] - i będą dostępne pełne dane restauracji, wraz z adresem. Dla mieszkań analogicznie.
komentarz 12 kwietnia 2022 przez CdxProj Użytkownik (910 p.)
Okej, to jest jasne. Podczas kiedy i restauracja i mieszkanie mają dokładnie jeden adres, to w relacji 1:1 można dodać te id. Ale nasuwa mi się pytanie: Co jeśli pojawi się kolejna wspólna cecha dla tych tabel, już nie w relacji 1:1 tylko 1:wielu?. Załóżmy że dokładamy tabelę zdjęcia (nie wiem czy to bardzo trafny przykład, ale już mniejsza). Każda restauracja może mieć wiele zdjęć, oraz każde mieszkanie może mieć wiele zdjęć. Jak wtedy powinny wyglądać tabele?
1
komentarz 12 kwietnia 2022 przez edutomek Dyskutant (8,380 p.)
Standardowo taki problem rozwiązuje się poprzez wprowadzenie dodatkowej tabeli, łączącej obydwie encje.

Załóżmy, że mamy [Restauracje] oraz [Dostawców] (składników potraw). Dany dostawca może zaopatrywać wiele restauracji, a dana restauracja może kupować składniki u różnych dostawców. Wystarczy dodać tabelę [RestauracjeDostawcy], w której będą kolumny restauracja_id oraz dostawca_id - i już możemy połączyć dowolnego dostawcę z dowolną restauracją.
komentarz 12 kwietnia 2022 przez CdxProj Użytkownik (910 p.)
A tego to już nie jestem przekonany czy rozumiem. Co w wypadku jeśli w wymienionym przez Ciebie przykładzie dołożymy tabelę [Fastfoody] która także będzie korzystała z tabeli [Dostawcy]? Powinno się dodać kolejną tabelę, coś na wzór [FastfoodyDostawcy]?
1
komentarz 12 kwietnia 2022 przez edutomek Dyskutant (8,380 p.)
Tak - dla każdej relacji n:n dotyczącej dwóch encji będzie potrzebna taka tabela.

Podobne pytania

0 głosów
2 odpowiedzi 254 wizyt
pytanie zadane 5 września 2016 w SQL, bazy danych przez shadou102 Pasjonat (21,630 p.)
0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 25 lutego 2017 w PHP przez Gabriel Janczak Użytkownik (710 p.)
0 głosów
0 odpowiedzi 86 wizyt
pytanie zadane 31 października 2018 w Systemy operacyjne, programy przez Neronys Bywalec (2,090 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...