gdfgdfg napisał(a)
mógłbyś rozpisać dokładnie jak wyglądają tabele?
bo z tego co napisałeś wynika imo że Obiekt_B reprezentuje tylko Tabelę_B która ma tylko dwa pola wiążące dokładnie jednego zawodnika z jedną drużyną, a w C jednego zawodnika z jednym meczem
a jeśli tak to lepiej raczej w Tabeli A dorobić dwa pola z id drużyny i meczu
Nie były to wszystkie pola tabeli - tabela jest zaprojektowana w miarę dobrze - wszystkie dane w niej zawarte są potrzebne na poziomie na którym wystepują.
Kod SQL poniżej
gdfgdfg napisał(a)
ogólnie dobre OOP można poznać po tym że kod wygląda prawie jak zdanie
a ten Twój jest raczej zagmatwany i ciężki do ogarnięcia
Zastosowałem entery w celu lepszej przejrzystości.
Poza tym szukam optymalnego rozwiązania.
Tak jak napisałem - nie zawsze mam dane z Tabeli A, czasami mam dane z Tabeli B lub C.
CREATE TABLE `liga_players` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(200) collate utf8_unicode_ci NOT NULL,
`surname` varchar(200) collate utf8_unicode_ci NOT NULL,
`typ` tinyint(2) NOT NULL,
`foto` varchar(200) collate utf8_unicode_ci NOT NULL,
`foto_source` varchar(255) collate utf8_unicode_ci default NULL,
`birth_date` date NOT NULL,
`birth_place` varchar(200) character set utf8 NOT NULL,
`country` varchar(200) collate utf8_unicode_ci NOT NULL,
`height` float(5,2) NOT NULL,
`weight` float(5,2) NOT NULL,
`position` varchar(200) collate utf8_unicode_ci NOT NULL,
`club_prev` varchar(200) collate utf8_unicode_ci NOT NULL,
`info` text collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `typ` (`typ`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1265 ;
CREATE TABLE `liga_players_position` (
`id` int(10) NOT NULL auto_increment,
`player_id` int(10) NOT NULL,
`pos_id` int(10) NOT NULL,
`number` int(11) default NULL,
`mode` tinyint(4) NOT NULL,
`info` text collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `pos_id` (`pos_id`),
KEY `player_id` (`player_id`),
KEY `mode` (`mode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2184 ;
CREATE TABLE `liga_scores_details` (
`det_id` int(10) unsigned NOT NULL auto_increment,
`spos_id` int(10) NOT NULL,
`det_min` int(3) NOT NULL,
`det_typ` varchar(50) collate utf8_unicode_ci NOT NULL,
`det_info` varchar(500) collate utf8_unicode_ci NOT NULL,
`det_other` varchar(100) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`det_id`),
KEY `spos_id` (`spos_id`,`det_typ`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7110 ;
CREATE TABLE `liga_scores_position` (
`spos_id` int(10) NOT NULL auto_increment,
`lpp_id` int(10) NOT NULL,
`score_id` int(10) NOT NULL,
`spos_start` float(3,0) default NULL,
`spos_stop` float(3,0) default NULL,
`spos_xy` varchar(20) collate utf8_unicode_ci default NULL,
`spos_info` tinytext collate utf8_unicode_ci,
PRIMARY KEY (`spos_id`),
KEY `lpp_id` (`lpp_id`,`score_id`),
KEY `score_id` (`score_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11560 ;
ALTER TABLE `liga_players_position`
ADD CONSTRAINT `liga_players_position_ibfk_5` FOREIGN KEY (`player_id`) REFERENCES `liga_players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `liga_players_position_ibfk_6` FOREIGN KEY (`pos_id`) REFERENCES `liga_table_position` (`pos_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `liga_scores_details`
ADD CONSTRAINT `liga_scores_details_ibfk_1` FOREIGN KEY (`spos_id`) REFERENCES `liga_scores_position` (`spos_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `liga_scores_position`
ADD CONSTRAINT `liga_scores_position_ibfk_5` FOREIGN KEY (`lpp_id`) REFERENCES `liga_players_position` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `liga_scores_position_ibfk_6` FOREIGN KEY (`score_id`) REFERENCES `liga_scores` (`score_id`) ON DELETE CASCADE ON UPDATE CASCADE;