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

Tworzenie dwóch tabel

Object Storage Arubacloud
0 głosów
110 wizyt
pytanie zadane 22 marca 2017 w SQL, bazy danych przez balti Obywatel (1,040 p.)

Witam, chciałem stworzyć dwie tabele niestety przy id_tytuly w tabeli Autorzy generuje mi bład. Oczywiscie zrobiłem tak, że to usunałem i wtedy udało się stworzyc dwie tabele. Problem w tym jest taki, że wtedy niby mam relacje między tabelami ale w tabeli Autorzy nie mam pola, które przechowuję klucz obcy z tabeli Tytul, a chciałbym je miec. 

create table Autorzy(
	id_autora int primary key identity,
	id_tytulu int foreign key references Tytuly(id_autora),
	imie varchar(20),
	nazwisko varchar(20),
)

create table Tytuly(
	id_tytulu int primary key identity,
	id_autora int foreign key references Autorzy(id_autora),
	tytul_ksiazki varchar(20),
	data_publikacji int,
)

 

1 odpowiedź

+1 głos
odpowiedź 22 marca 2017 przez Bosswell Nałogowiec (36,470 p.)
wybrane 23 marca 2017 przez balti
 
Najlepsza

Wyrzuca Ci błąd, ponieważ utworzenie czegoś takiego nie miałoby sensu.

Zaużmy, że do tabeli 'Autorzy' dodasz wpis.

1, ???, Jan, Kowalski

No i właśnie tu jest problem.

Co jeśli w tabeli 'Tytuły' nie ma ani jednego wpisu, albo nie ma tytułu, który by odpowiadał temu autorowi ? 


Ten sam problem następuje przy wpisie to tabeli Tytuły.

przykładowy wpis

1, ???, Książka, (i tutaj data publikacji powinna być typu datetime, lub date)

Jak widzisz kolejny wpis byłby bez sensu.


To co chcesz osiągnąć, to relacja typu wiele do wielu ( wiele autórów, może mieć wiele książek )

A żeby to zrobić będzie Ci potrzebna tabela pomocnicza.

CREATE TABLE Ksiazki (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  tytul VARCHAR(20),
  data_publikacji DATETIME,
  PRIMARY KEY(id)
) ENGINE=InnoDB;

CREATE TABLE Autorzy (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  imie VARCHAR(20),
  nazwisko VARCHAR(20),
  PRIMARY KEY(id)
) ENGINE=InnoDB;

CREATE TABLE Pomocnicza (
  Ksiazki_id INTEGER UNSIGNED NOT NULL,
  Autorzy_id INTEGER UNSIGNED NOT NULL,
  INDEX Ksiazki_has_Autorzy_FKIndex1(Ksiazki_id),
  INDEX Ksiazki_has_Autorzy_FKIndex2(Autorzy_id),
  FOREIGN KEY(Ksiazki_id)
    REFERENCES Ksiazki(id)
  FOREIGN KEY(Autorzy_id)
    REFERENCES Autorzy(id)
);

 

Podobne pytania

0 głosów
1 odpowiedź 77 wizyt
0 głosów
0 odpowiedzi 112 wizyt
pytanie zadane 24 stycznia 2023 w SQL, bazy danych przez kidsqldev Nowicjusz (120 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...