2015-02-07 67 views
0

需要一些意見,作爲這樣做的最佳方式。婚姻關係

所以我創建一個系統競爭,類似的方式運動,如足球/足球工作等

目前,我有一個賽季,隨後一個賽季有很多球隊,一支球隊可以再有很多議員。

然後一個賽季有很多比賽,其中所有的參賽隊都會參加每場比賽,但不是每個參賽隊都會參加比賽。

什麼是存儲團隊成員參加比賽的最佳方式?

目前我只想着比賽表和成員之間的一個關鍵點,但是這並不表示成員屬於哪個團隊,並且一個成員可以屬於很多團隊。你可以有一個3路數據透視表嗎?

繼承人我當前的表結構

CREATE TABLE `seasons` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `archived` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `teams` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `season_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `teams_season_id_index` (`season_id`), 
    CONSTRAINT `teams_season_id_foreign` FOREIGN KEY (`season_id`) REFERENCES `seasons` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `members` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `display_name` varchar(12) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `members_display_name_unique` (`display_name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `members_teams` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `member_id` int(10) unsigned NOT NULL, 
    `team_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `members_teams_member_id_index` (`member_id`), 
    KEY `members_teams_team_id_index` (`team_id`), 
    CONSTRAINT `members_teams_member_id_foreign` FOREIGN KEY (`member_id`) REFERENCES `members` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `members_teams_team_id_foreign` FOREIGN KEY (`team_id`) REFERENCES `teams` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `competitions` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `start_at` datetime NOT NULL, 
    `end_at` datetime NOT NULL, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `skill` int(11) NOT NULL, 
    `season_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `competitions_season_id_index` (`season_id`), 
    CONSTRAINT `competitions_season_id_foreign` FOREIGN KEY (`season_id`) REFERENCES `seasons` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+1

我讀到這個主題,立即想到「這些類型的問題錯誤的網站」:P – 2015-02-07 14:08:11

回答

0

我想有一個players表,使玩家的信息,從任何一支球隊的信息隔離。然後你可能會有一個competition_players表或類似的表,它有三個外鍵:團隊ID,玩家ID和競爭ID,所以你可以看到誰在每場比賽中爲什麼參加了比賽。