Chcę reprezentować rekursywne relacji rodzic-dziecko w bazie danych MySQL. Chcę utworzyć relację category
- subcategory
. Kategoria może mieć N podkategorii i każda z nich może zawierać N podkategorii i tak dalej. Myślałem o pojedynczym stole z obcym kluczem wskazującym w jego jaźni. Oto co mam na myśli:Konstrukcja bazy danych SQL, rekursywna relacja rodzic-dziecko?
CREATE TABLE `category` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`parent_category` int NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`parent_category`) REFERENCES `category` (`id`)
)
parent_category
może być null, jeśli kategoria jest na najwyższym poziomie.
Czy to jest właściwy sposób reprezentowania takiego związku? Czy są jeszcze inne rzeczy, które powinienem wziąć pod uwagę w moim projekcie (wydajność, zapytania ...)?
możliwe duplikat [SQL - Jak przechowywać i nawigowanie hierarchie] (http://stackoverflow.com/questions/38801/sql -how-to-store-and-navigate-hierarchies) –
Ze względu na ograniczone funkcje SQL MySQL nie zrobiłbym tego w MySQL. Naprawdę trudno będzie odzyskać dane z tej hierarchii ze względu na brak zapytań rekursywnych. Wyszukaj "model zestawu zagnieżdżonego" dla innego projektu, który można zaimplementować za pomocą MySQL –