» »

MySQL Relacije

MySQL Relacije

echoman ::

Pozdravljeni,

Zanima me, kako v phpmyadmin nastavim relacije? Imam 2 tabeli imenovani seznam in izdelki, rad pa bi, da bi bili izdelki na seznamu.

Seznam:
id, ime, opis, kategorija, izdelek_id

Izdelki:
izdelek_id, ime, opis, kategorija

Relacija naj bi imela povezavo ena proti mnogo (Seznam - Izdelki).

Nekaj sem sicer že sam poskušal, vendar očitno ne delam pravilno, saj vedno dobim napako. Hvala za pomoč!

Boone ::

Storage Engine oz. tip moras nastavit na InnoDB ce hoces uporabljat foreign keye.

echoman ::

To sem nastavil, pa sem pravtako dobil napako.

Nastavil pa sem:
Seznam:
id - primary key
izdelek_id - index

Izdelki:
izdelek_id - primary key
izdelek_id - index

Sprobal sem vse možne kombinacije, med temi opcijami. Kaj torej delam narobe?

FrEaKmAn ::

bilo bi lepo, da napišeš kakšno napako dobiš...

Iluvatar ::

Tu je ze majhen "vsebinski" problem, pises namrec da bi rad imel ena mnogo, se pravi en seznam ima lahko vec izdelkov. V tabeli seznam pa imas izdelek id. Ce hoces tako relacijo, kot si jo opisal in si tako postavil tuje kljuce, potem bos imel samo en izdelek na seznamu. Podatki bodo taksni potem:
Izelek
1, Matica m35, opis matice m35, kategorija matic
Seznam
1, Matice in sraufi, opis seznama matice in sraufi, kategorija seznama matic, 1 ---to je izdelek_id

Kako bos zdaj dal na isti seznam se eno matico? Ce bos vstavil, nov zapis v tabelo seznam, bo ta zapis dobil id 2, kar pa je ze nov seznam ane?
Ti bi rabil pomoje se eno tabelo s katero bi definiral kateri izdelki gredo h kateremu seznamu npr.
IzdelkiNaSeznamu
Id, izdelek_id, seznam_id
V tabeli seznam pa ne rabis izdelek_id
Tvoji podatki bodo potem taki:
izdelek:
1, Matica m35, opis, kateg.
2, Matica m55, opis, kateg.
3, Srauf 10, opis, kateg

Seznam
1, Matice in sraufi, opis, kateg.
2, Sraufi, opis, kateg.
IzdelkiNaSeznamu
Id, izdelek_id, seznam_id
1. 1. 1
2. 2. 1
3. 3. 1
4. 3. 2
S tem si povedal, da ima lahko en seznam vec izdelkov, celo to, da je lahko isti izdelek na vec sesznamih hkrati, v tvojem primeru je srauf na seznamu sraufi in na seznamu matice in sraufi.
Tako bo pomoje bolj logicno ane?
P.s. Sorry za typo, pisem iz telefona namrec ;-)

Zgodovina sprememb…

  • spremenil: Iluvatar ()

echoman ::

Hvala za vso pomoč!

Rešil sem sicer z drugačnim načinom in sicer z brisanjem vsebine v tabelah - potem so relacije začele delovati.

LP, echoman

Zgodovina sprememb…

  • spremenil: echoman ()

mkos2 ::


mysql> show create table cd;
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------------+
| Table | Create Table


                                              |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------------+
| cd    | CREATE TABLE `cd` (
  `CDID` int(11) NOT NULL,
  `NaslovCD` char(20) NOT NULL,
  `Cena` float DEFAULT NULL,
  `Opombe` char(100) DEFAULT NULL,
  `leto` int(11) DEFAULT NULL,
  PRIMARY KEY (`CDID`),
  UNIQUE KEY `uniq_ImeCD` (`NaslovCD`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table posnetek;
+----------+--------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------------------------------------+
| Table    | Create Table



                                                                      |
+----------+--------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------------------------------------+
| posnetek | CREATE TABLE `posnetek` (
  `PID` int(11) NOT NULL AUTO_INCREMENT,
  `Naslov` char(20) NOT NULL,
  `Genre` char(10) NOT NULL,
  `Trajanje` time NOT NULL,
  `AvtorID` int(11) NOT NULL,
  PRIMARY KEY (`PID`),
  KEY `tujiKAvtor` (`AvtorID`),
  CONSTRAINT `tujiKAvtor` FOREIGN KEY (`AvtorID`) REFERENCES `avtor` (`AvtorID`)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 |
+----------+--------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table vsebina;
+---------+---------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-+
| Table   | Create Table




 |
+---------+---------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-+
| vsebina | CREATE TABLE `vsebina` (
  `CDID` int(11) NOT NULL,
  `PID` int(11) NOT NULL,
  PRIMARY KEY (`CDID`,`PID`),
  KEY `tujiKPID` (`PID`),
  CONSTRAINT `tujiKCD` FOREIGN KEY (`CDID`) REFERENCES `cd` (`CDID`) ON DELETE C
ASCADE ON UPDATE CASCADE,
  CONSTRAINT `tujiKPID` FOREIGN KEY (`PID`) REFERENCES `posnetek` (`PID`) ON DEL
ETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+---------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-+
1 row in set (0.00 sec)

mysql> show create table avtor;
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------+
| Table | Create Table


        |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------+
| avtor | CREATE TABLE `avtor` (
  `AvtorID` int(11) NOT NULL,
  `Ime` char(10) NOT NULL,
  `Priimek` char(20) DEFAULT NULL,
  `drzava` char(3) NOT NULL,
  `rojen` date DEFAULT NULL,
  PRIMARY KEY (`AvtorID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------+
1 row in set (0.00 sec)

mysql> show tables;
+--------------------+
| Tables_in_zbirkacd |
+--------------------+
| avtor              |
| cd                 |
| posnetek           |
| vsebina            |
+--------------------+
4 rows in set (0.00 sec)




Izpišite priimke in imena vseh avtorjev in število njihovih posnetkov.

Zanima me kako naj tole izvedem?

Zgodovina sprememb…

  • spremenil: Mavrik ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL težava

Oddelek: Programiranje
365188 (4470) joseti
»

MySql Vprasanje - problem dupliciranih kljucev

Oddelek: Izdelava spletišč
131436 (1258) KernelPanic
»

portal ostal, baza sla

Oddelek: Izdelava spletišč
61830 (1715) bombacina
»

SQL problem

Oddelek: Programiranje
91523 (1360) Bossek
»

anketa z vec moznostmi

Oddelek: Izdelava spletišč
121628 (1507) Packač

Več podobnih tem