Avatar billede munkiex Nybegynder
14. april 2014 - 10:24 Der er 2 kommentarer og
1 løsning

Relationer i SQL database

Hej,

Jeg er ny til at lave relationer i sql databaser og har derfor et spørgsmål angående dette og auto_increment.

Jeg har følgende to tabeller:

CREATE TABLE `sp_presentations` (
  `presentation_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `presentation_title` varchar(250) DEFAULT NULL,
  `presentation_date_creation` varchar(20) DEFAULT NULL,
  `presentation_date_updated` varchar(20) DEFAULT NULL,
  `presentation_theme_id` int(11) DEFAULT NULL,
  `presentation_theme_type` varchar(50) DEFAULT 'default',
  `location_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`presentation_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `sp_presentation_slides` (
  `slide_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `slide_title` varchar(250) DEFAULT NULL,
  `slide_timer` varchar(250) DEFAULT NULL,
  `slide_date_creation` varchar(20) DEFAULT NULL,
  `slide_date_updated` varchar(20) DEFAULT NULL,
  `slide_sortorder` int(11) DEFAULT NULL,
  `slide_template_id` int(11) DEFAULT NULL,
  `presentation_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`slide_id`),
  FOREIGN KEY (`presentation_id`) REFERENCES `sp_presentations` (`presentation_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Men hvergang jeg prøver at sætte en relation mellem parent (sp_presentations) og child (sp_presentation_slides) for jeg en fejl om at det ikke kan lade sig gøre..
og dette sker hver gang jeg prøver at knytte foreign key på hvor referencen er en auto_increment

Nogen som kan give et svar på hvorfor man ikke kan gøre det når det er en auto_increment og evt. en måde at kan omgåes det?
Avatar billede Slettet bruger
14. april 2014 - 10:46 #1
Dine datatyper skal være ens. I sp_presentations er primary key unsigned, dermed skal presentation_id i sp_presentation_slides også være unsigned.

Rettet og virkende version:

DROP TABLE if exists sp_presentations;
CREATE TABLE `sp_presentations` (
  `presentation_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `presentation_title` varchar(250) DEFAULT NULL,
  `presentation_date_creation` varchar(20) DEFAULT NULL,
  `presentation_date_updated` varchar(20) DEFAULT NULL,
  `presentation_theme_id` int(11) DEFAULT NULL,
  `presentation_theme_type` varchar(50) DEFAULT 'default',
  `location_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`presentation_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE if exists sp_presentation_slides;
CREATE TABLE `sp_presentation_slides` (
  `slide_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `slide_title` varchar(250) DEFAULT NULL,
  `slide_timer` varchar(250) DEFAULT NULL,
  `slide_date_creation` varchar(20) DEFAULT NULL,
  `slide_date_updated` varchar(20) DEFAULT NULL,
  `slide_sortorder` int(11) DEFAULT NULL,
  `slide_template_id` int(11) DEFAULT NULL,
  `presentation_id` int(11) UNSIGNED DEFAULT NULL,
  PRIMARY KEY (`slide_id`),
  FOREIGN KEY (`presentation_id`) REFERENCES `sp_presentations` (`presentation_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Avatar billede munkiex Nybegynder
14. april 2014 - 10:50 #2
mange tak for hjælpen :) har accepteret dit svar
Avatar billede Slettet bruger
14. april 2014 - 10:54 #3
Det var så lidt.
Har selv haft hovedpine fra samme problem, dengang jeg startede med relationsdatabaser.
De fleste vil dog aldrig opleve fejlen, da de ikke værdsætter og bruger UNSIGNED hvor den bør bruges. Så, dejligt at se en, som bruger datatyper korrekt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester