Permalänk
Medlem

Ärva saker i SQL / PHP?

Jo, det är så att jag tänkt bygga en databas med diverse produkter, i detta fall möbler. Databasen har en tabell som heter "produkt". Produkt innehåller id, namn, pris, info som fält.
Produkttabellen ska också innehålla mått på produkterna och det är här mitt problem kommer.

Jag hade då tänkt mig en tabell eller något till, där alla sorts mått finns;
längd, bredd, djup, diameter, höjd o.s.v.

Alla sorts möbler har ju inte alla dessa mått utan alla möbler har ju bara ett fåtal av dessa mått, så jag hade tänkt försöka mig på nånting i form av att produkttabellen kan ärva mått som behövs beroende på vilken produkt det är.

Hur gör man detta?

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk
Medlem

Är inte jättehaj på SQL, men jag tror inte att du kan ärva objekt i SQL. Det du skulle kunna göra är att ha en huvudtabell, mobler, och en tabell för varje möbelsort, typ, stolar och bord.
Möblerna i mobler har ett id, som är samma som i stolar/bord. Sen hämtar du dem med en fråga i stil med detta:
SELECT * FROM mobler,stolar WHERE id=x AND mobler.id = stolar.id

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Torandi
Är inte jättehaj på SQL, men jag tror inte att du kan ärva objekt i SQL. Det du skulle kunna göra är att ha en huvudtabell, mobler, och en tabell för varje möbelsort, typ, stolar och bord.
Möblerna i mobler har ett id, som är samma som i stolar/bord. Sen hämtar du dem med en fråga i stil med detta:
SELECT * FROM mobler,stolar WHERE id=x AND mobler.id = stolar.id

Problemet är ju då att det finns olika typer av bord exempelvis.

Exempel:
Runda bord och fyrkantiga bord.
Runda bord har en diameter medans fyrkantiga bord har en längd och bredd/djup.

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk
Medlem

Om du använder exempelvis Doctrine så kan du i DQL använda arv. Kolla på http://phpdoctrine.org/

Visa signatur

Mina boktips: Clean codeHead First Design PatternsHead First Object-oriented Analysis and Design
Innovation distinguishes between a leader and a follower. — Steve Jobs

Permalänk
Medlem

Du kanske skulle kunna ha en tabell där du lagrar mått. T.ex:

Mått (id, värde, enhet, typ)
Möbel (id, ..., ...)
Möbel_har_mått (möbel.id, mått.id)

I mått-tabellen lagrar du sen värden enligt:

id - värde - enhet -typ
1 - 10 - cm - höjd
2 - 33 - cm - bredd
3 - 1 - m - diameter

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Rimion
Du kanske skulle kunna ha en tabell där du lagrar mått. T.ex:

Mått (id, värde, enhet, typ)
Möbel (id, ..., ...)
Möbel_har_mått (möbel.id, mått.id)

I mått-tabellen lagrar du sen värden enligt:

id - värde - enhet -typ
1 - 10 - cm - höjd
2 - 33 - cm - bredd
3 - 1 - m - diameter

Det skulle kunna vara en fin idé. Ska titta lite närmare på den och se om jag kan hitta några brister
Tack för tipset!

EDIT: Möblerna på sidan har väldigt skiftande mått, så isåfall måste jag ju ha en tabell med alla mått som finns i stort sett, eller har jag förstått fel?

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk

Varför ska du ha måtten separat då du själv skriver att det inte är många produkter med samma mått?

Visa signatur

Ruby (on rails) är fint!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av -=fredrik=-
EDIT: Möblerna på sidan har väldigt skiftande mått, så isåfall måste jag ju ha en tabell med alla mått som finns i stort sett, eller har jag förstått fel?

Du har förstått min tanke rätt. I tabellen mått lagrar alla mått som finns för alla möbler. Har du 10 exemplar av möbel x kan du i och för sig använda samma mått.id för dessa (om du inte löst det så att du i tabellen har en kolumn för antal).

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Rimion
Du har förstått min tanke rätt. I tabellen mått lagrar alla mått som finns för alla möbler. Har du 10 exemplar av möbel x kan du i och för sig använda samma mått.id för dessa (om du inte löst det så att du i tabellen har en kolumn för antal).

Nja, det blir nog inte riktigt bra.
Möblerna finns inte i några antal, utan det handlar bara om 1 st av "stol x" exempelvis. Ingen affär på det sättet, det är bara en sida för att visa vilka produkter som finns.

De mått som kommer användas är Djup, Bredd, Längd, Höjd samt diameter.
Problemet är ju att alla möbler använder ju inte alla dessa mått och därför vill jag inte ha alla mått i tabellen "Produkt", utan jag skull på något sätt kunna välja vilka måttyper en viss möbel ska ha.
Exempel: Ett bord kan vara fyrkantigt och ha måtten:
Längd: 140
Bredd: 90
Höjd: 110

Ett annat bord är runt, och får då måtten:
Diameter: 90
Höjd: 110

Problematiken ligger ju i att alla har olika måttyper, eftersom alla möbler inte ser likadana ut. På något sätt måste man ju kunna välja från någon tabell vilka mått som ska användas och endast skriva ut de mått där det finns värden exempelvis?

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk
Medlem

Re: Ärva saker i SQL / PHP?

Citat:

Ursprungligen inskrivet av -=fredrik=-
Jo, det är så att jag tänkt bygga en databas med diverse produkter, i detta fall möbler. Databasen har en tabell som heter "produkt". Produkt innehåller id, namn, pris, info som fält.
Produkttabellen ska också innehålla mått på produkterna och det är här mitt problem kommer.

Jag hade då tänkt mig en tabell eller något till, där alla sorts mått finns;
längd, bredd, djup, diameter, höjd o.s.v.

Alla sorts möbler har ju inte alla dessa mått utan alla möbler har ju bara ett fåtal av dessa mått, så jag hade tänkt försöka mig på nånting i form av att produkttabellen kan ärva mått som behövs beroende på vilken produkt det är.

Hur gör man detta?

Jag tycker personligen att du borde bryta ut måtten till en separat tabell. Dvs du har din produkt t.ex bord i en tabell. Vi säger att bordet har ID 1. Om det handlar om ganska unika mått räcker det att du har en annan tabell med måtten där du sedan har ditt produkt id dvs t.ex ID 1 B 100 H 70 D 70, samtlig information naturligtvis i olika kolumner.

Handlar det däremot om ganska många standardmått så kan du ha en tabell med produkterna och en med måtten som i exemplet ovan men att du sedan har en kopplingstabell med ID och Mått ID. Denna tabell innehåller då relationen mellan mått och produkt.

Att "ärva" som du nämner i första inlägget går inte. Men du kan skapa relationer, i phpmyadmin har jag för mig att det är lite småklurigt. Jag har på senare tid användt Mysql GUI (som är ett program) för databas-hantering som finns att ladda ner på www.mysql.se.

Men annars är det i korta drag bara att sätta t.ex i produkttabellen ID som primary key och i mått-tabellen som foreign key. Detta innebär att inga andra ID i mått-tabellen kan matas in än dom som finns i produkt tabellen.

Hoppas denna något långa förklaring hjälper. Citera om jag ska följa upp :).

Permalänk
Medlem

Re: Re: Ärva saker i SQL / PHP?

Citat:

Ursprungligen inskrivet av Seabazz
Jag tycker personligen att du borde bryta ut måtten till en separat tabell. Dvs du har din produkt t.ex bord i en tabell. Vi säger att bordet har ID 1. Om det handlar om ganska unika mått räcker det att du har en annan tabell med måtten där du sedan har ditt produkt id dvs t.ex ID 1 B 100 H 70 D 70, samtlig information naturligtvis i olika kolumner.

Handlar det däremot om ganska många standardmått så kan du ha en tabell med produkterna och en med måtten som i exemplet ovan men att du sedan har en kopplingstabell med ID och Mått ID. Denna tabell innehåller då relationen mellan mått och produkt.

Tack för svaret! Det du menar med samtlig information antar jag att du menar
Bredd 100
Höjd 70
Djup 70

Alltså att man skriver in "B" eller "Bredd" direkt i kolumnen följt av värdet.
Jag vill dock undvika alla sorts anomalies i mina tabeller. En bra databasstruktur ska ju minimera alla sorts upprepningar så som bredd, höjd m.m. så jag vill egentligen bara ha själva värdet i en kolumn och inget mer.

En lösning antar jag är att jag skriver ut
"Bredd:
Höjd:
Djup:
Diameter:
"
på hemsidan och de värden som saknas blir tomma, men det känns inte som någon optimal lösning.

EDIT: En if-sats som kollar om värdet är tomt i tabellen löste ju det lätt.

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |