Jak stworzyć klycz obcy to tabeli, która posiada dwa klucze podstawowe?

0

Witam,

Mam takie dwie tabele:

 
CREATE TABLE IF NOT EXISTS `children` (
  `P_Id` int(11) NOT NULL,
  `parent_id` int(255) NOT NULL,
  `FirstName` varchar(255) DEFAULT NULL,
  `Address` varchar(255) DEFAULT NULL,
  `City` varchar(255) DEFAULT NULL
) ENGINE=Innodb DEFAULT CHARSET=utf8;


INSERT INTO `children` (`P_Id`, `parent_id`, `FirstName`, `Address`, `City`) VALUES
(1, 23, '23', '23', '23');


CREATE TABLE IF NOT EXISTS `parent` (
  `P_Id` int(11) NOT NULL,
  `LastName` varchar(255) NOT NULL,
  `FirstName` varchar(255) DEFAULT NULL,
  `Address` varchar(255) DEFAULT NULL,
  `City` varchar(255) DEFAULT NULL
) ENGINE=Innodb DEFAULT CHARSET=utf8;



INSERT INTO `parent` (`P_Id`, `LastName`, `FirstName`, `Address`, `City`) VALUES
(1, 'Test', 'Test', 'Test', 'Test');

ALTER TABLE `children`
  ADD PRIMARY KEY (`P_Id`), ADD KEY `fk_test` (`parent_id`);

ALTER TABLE `parent`
  ADD PRIMARY KEY (`P_Id`,`LastName`);


W tabeli parent, kolumny P_Id oraz LastName mają klucze główne, ponieważ chce zrobić te dwie kolumny unikalne.
Teraz chcę dodać do tabeli children klucz obcy do kolumny parent. Jak mogę to zrobić? Mam dodać P_Id jako klucz obcy do children?

Czy mam stworzyć PK jak tak:

 
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

Z dokumentacji wynika, że tabela Persons ma jeden klucz główy, który nazywa sie pk_PersonID. To teraz do tego klucza mam się odwoła z tabeli children?

a poźniej stworzyć klucz obcy:

 
ALTER TABLE children
ADD FOREIGN KEY (paren_id)
REFERENCES pk_PersonID(PersonID )

Jak działa wiele kluczy podstawowych w tej samej tabeli? Po co są ? czy m się różnią od metody unique()?

1

W TABELI MOŻE BYĆ TYLKO JEDEN KLUCZ PODSTAWOWY!! Gdzieś ty wyczytał, że baza tabela może mieć kilka kluczy głównych?? Poza tym co oznacza, że "odwołuję się do klucza z tabeli"? Klucze obce są po to aby dane się nie rozjeżdżały! A aby kolumna była unikalna to się na niej zakłada indeks UNIKALNY a nie klucz główny. Klucz główny służy do czego innego.

0

Definicje nie-książkowe:

Klucz główny: klucz unikalny który wykorzystują inne tabele w celu weryfikacji swoich kluczy obcych, może mieć kilka pól, ale może być tylko jeden na tabelę
Klucz obcy: odwołanie do klucza głównego z innej tabeli, zawiera tylko wartości które są w kluczu głównym tabeli do której się odwołuje, może być kilka takich kluczy w ramach jednej tabeli
Klucz alternatywny: wymuszenie unikalności jednego lub więcej pól w tabeli
Indeks unikalny: indeks wymuszający unikalność wszystkich zawartych w nim pól razem

0

To po co mi kilka kluczy głównych w jednej tej samej tabeli? I dlaczego w manualu SQL piszą, że tabela, która ma np 3 klucze główne, tak naprawę ma jeden?

http://www.w3schools.com/sql/sql_primarykey.asp

0

przecież tu się kłania elementarna sztuka czytania ze zrozumieniem!

The PRIMARY KEY constraint uniquely identifies each record in a database table.

Primary keys must contain UNIQUE values.

A primary key column cannot contain NULL values.

Most tables should have a primary key, and each table can have only ONE primary key.

co oznacza

KLUCZ GŁÓWNY jednoznacznie identyfikuje każdy rekord w tabeli.
Klucz główny musi posiadać UNIKALNE wartości.
Klucz główny nie może zawierać NULI.
Większość tabel powinna mieć klucz główny, i każda tabela może mieć tylko JEDEN klucz główny

to tera wskaż tę część, która mówi o tabeli z TRZEMA KLUCZAMI GŁÓWNYMI

0

Jak mam w tej samej kompozycje klucza głównego ( czyli np 3 PK tj. KEY(id1, id2, id3), tak? Tak. I teraz z drugiej tabeli chcę utworzyć FK do tej tabeli z kompozytem. Czyli do którego klucza mam się odwołać?

0

dalej nie łapiesz. Nie wiem jak to napisać inaczej

<font size="40" style="bold">TO JEST JEDEN

KLUCZ GŁÓWNY

SKŁADAJĄCY SIĘ

Z DWÓCH KOLUMN!!!

TO NIE SĄ DWA KLUCZE

TYLKO J E D E N</span>

Jak chcesz do niego zrobić FK to też to FK MUSI SIĘ SKŁĄDAĆ Z DWÓCH KOLUMN

1 użytkowników online, w tym zalogowanych: 0, gości: 1