Hoe maak het beste verbinding tussen twee tabellen? Lookup value / weergave op web?

Status
Niet open voor verdere reacties.

vacances2000

Gebruiker
Lid geworden
28 jan 2013
Berichten
113
Beste,
Ik heb in hoofdtabel (accomodatie) met de algemene gegevens zoals naam, adres, accomodatiethema tel etc en 1 "sub" tabel met de accomodatie themas. Nu is het enerzijds de bedoeling 5 thema's te koppelen aan elke accomodatie en anderzijds deze te weergeven op de website in de accomodatie template, de "thema" filter en als tag.

M'n eerste idee om deze 5 keuzes per hotel te kunnen weergeven is om een "koppel" tabel te voegen tussen beide eerst genoemde tabellen. Praktisch zou het er als volgt uit moeten zien:

Tabel : Accomodatie
Acc_ID - Naam - Adres - etc

Koppeltabel : Accomodatie_thema
Acc_ID - Thema_ID (1) - Thema_ID (2) - Thema_ID (3) - Thema_ID (4) - Thema_ID (5)

Tabel : Thema
Thema_ID - Naam

Vraag is dus:
- Is dit de juiste weg om 2 tabellen te koppelen middels JOIN en Foreign keys?
- Krijg ik via deze weg de informatie uit de Tabel Accomodatie en de Koppel_tabel Accomodatie_thema ook goed weergegeven via PHP/ HTML?

Hoe zouden jullie dat doen?

Dank voor jullie bijdrage.

Jonathan
 
Laatst bewerkt:
Als je met genummerde velden gaat werken, dan moet je nodig je databasestructuur nakijken.
Want je een thema toevoegt, dan moet je nooit 'in de breedtte werken', maar in de lengte. Dus een record aanmaken in de Thema tabel.

De koppeltabel bevat per record een koppeling tussen de thema en een accommodatie.
 
Want je een thema toevoegt, dan moet je nooit 'in de breedtte werken', maar in de lengte.
Mee eens, zie tabel Accomodatie_thema, die gaat de diepte in, niet de breedte.
Code:
Accomodatie

Acc_ID | Naam        | Adres
  1    | Hotel Botel | Schoolstraat
  2    | Hotel Appel | Gildelaan
  3    | Hotel Lelie | Koperstrrat

Thema

Th_ID  | Thema
  1    | Stilte
  2    | Familie
  3    | Kinderen

Accomodatie_thema

AcThID   Acc_ID  |  Th_ID
  1    |   1     |    1
  2    |   1     |    3
  3    |   2     |    2
Noot: veld 'AcThID' is niet nodig. Dit is een persoonlijke voorkeur.
 
Laatst bewerkt:
Thanks Bron / PHP4U.

Is TINYINT(1) niet een betere optie als ook filters daarna wilt maken?
 
Ik snap dat je geen bigint gebruikt maar een tinyint is slechts een byte (getal -128...127). Heb je zeer weinig accomodaties (ook in de toekomst) dan kan je dit overwegen maar ik zou het niet doen. Voor filtering maakt het niets uit.
 
ok, dank je. Doorgaand op die links aanleggen van de oorsprokelijke vraag, kun je meerdere tabellen aan 1 set koppelen en dan weer aan je accomodatie? of beter steeds weer aparte koppeltabellen? Wat ik bedoel is als volgt:

1 accomodation = 1 receptie = meerdere service types

Hotel
Hotel_ID Naam

Hotel_receptie
Receptie_ID Hotel_ID Clean_ID Smoking_ID enzovoort

Tabel 1 : cleaning
Clean_ID Schoonmaak_freq Laundry_service etc
1 Dagelijks Ja

Tabel 2 : Smoking_policy
Smoking_ID Naam
1 Non-smoking
2 Enkel Lobby




OF kun je dus beter (met het oog op de informatie correct op de website te vermelden):
Hotel
Hotel_ID Naam Smoke_ID
1 Hotel Klaas 1

Tabel 1 : cleaning
HOTEL_ID Clean_ID Schoonmaak_freq Laundry_service etc
1 1 Dagelijks Ja

Tabel 2 : Smoking_policy
Smoking_ID Naam
1 Non-smoking
2 Enkel Lobby

Dank,

Jonathan
 
Nee, want dan ga je voor alle kamereigenschappen weer tabellen aanmaken. En dat is ook niet de bedoeling. Zoals ik al zei zijn dat eigenschappen of properties.
Dan kan je dus beter een tabel aanmaken waarin je dus records maakt met alle eigenschappen zoals: cleaning, non-smoking, locker, television, minibar etc...

Die koppel je dan aan een kamertype.

Lees anders eens wat door over databasenormalisatie.
 
Laatst bewerkt:
Lees anders eens wat door over databasenormalisatie.
Dit is dé tip in dit topic :cool:

1 accomodation = 1 receptie = meerdere service types
Je geeft eigenlijk hier zelf al aan dat de receptie een onderdeel is van een accomodatie. In het voorbeeld #3 zou je dit kunnen toevoegen

Code:
Accomodatie Type

Acc_Type_ID | Acc_Type
     1      | Hotel
     2      | Bed & Breakfast
     3      | Bungalowpark

Accomodatie

Acc_ID | Acc_Type_ID | Receptie | Naam        | Adres
  1    |      3      |   True   | Park Bostel | Schoolstraat
  2    |      1      |   True   | Hotel Appel | Gildelaan
  3    |      2      |   False  | BB LeliePan | Koperstrrat

Noot: als de Receptie veel 'receptie-specifieke' eigenschappen heeft die per accomodatie verschillen dan zou je er een aparte tabel van kunnen maken.
Met 'receptie-specifiek' bedoel ik bijvoorbeeld wel/geen winkel, openingstijden, wel/geen fietsverhuur, enz.

Als je wat gelezen hebt over db normalisatie dan zie je meer de samenhang.
 
Indien ik van u was zou ik indien het web was onmiddelijk kollomen toevoegen.
zoals:
aantal keren bekeken
aantal keren gezocht
gpslocatie
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan