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

Problem przy projektowaniu bazy danych

42 Warsaw Coding Academy
0 głosów
271 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 345 wizyt
pytanie zadane 5 września 2016 w SQL, bazy danych przez shadou102 Pasjonat (21,690 p.)
0 głosów
1 odpowiedź 385 wizyt
pytanie zadane 25 lutego 2017 w PHP przez Gabriel Janczak Użytkownik (710 p.)
0 głosów
0 odpowiedzi 101 wizyt
pytanie zadane 31 października 2018 w Systemy operacyjne, programy przez Neronys Bywalec (2,090 p.)

93,383 zapytań

142,383 odpowiedzi

322,539 komentarzy

62,745 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...