Kolejność tabel w bazie danych

Zaczęty przez cieplutki, 19 Styczeń 2023, 10:09

0 użytkowników i 1 Gość przegląda ten wątek.

cieplutki

Witajcie,
Miałem forum na silniku 2.0.19 zrobiłem upgrade do 2.1.3
Teraz chcę to przenieść na inny serwer, gdy instaluję czyste forum i porównuję tabele to są one rozmieszczone w nieco innej kolejności i teraz pytanie:
mogę zrobić import sql i kwerandą drop create ale czy to nie będzie miało wypływu na nowo dodawane modyfikacje czy struktura tabeli jej kolejność ma znaczenie?

Dla przykładu tabela użytkowników na starym forum po upgradzie ma taką strukturę:

CytatCREATE TABLE `smf_members` (
  `id_member` mediumint(8) UNSIGNED NOT NULL,
  `member_name` varchar(80) NOT NULL DEFAULT '',
  `date_registered` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `posts` mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
  `id_group` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
  `lngfile` varchar(255) NOT NULL DEFAULT '',
  `last_login` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `real_name` varchar(255) NOT NULL DEFAULT '',
  `instant_messages` smallint(5) NOT NULL DEFAULT 0,
  `unread_messages` smallint(5) NOT NULL DEFAULT 0,
  `new_pm` tinyint(3) UNSIGNED NOT NULL DEFAULT 0,
  `buddy_list` text NOT NULL,
  `pm_ignore_list` text DEFAULT NULL,
  `pm_prefs` mediumint(8) NOT NULL DEFAULT 0,
  `mod_prefs` varchar(20) NOT NULL DEFAULT '',
  `message_labels` text DEFAULT NULL,
  `passwd` varchar(64) NOT NULL DEFAULT '',
  `email_address` varchar(255) NOT NULL DEFAULT '',
  `personal_text` varchar(255) NOT NULL DEFAULT '',
  `birthdate` date NOT NULL DEFAULT '1004-01-01',
  `website_title` varchar(255) NOT NULL DEFAULT '',
  `website_url` varchar(255) NOT NULL DEFAULT '',
  `show_online` tinyint(4) NOT NULL DEFAULT 1,
  `time_format` varchar(80) NOT NULL DEFAULT '',
  `signature` text NOT NULL,
  `time_offset` float NOT NULL DEFAULT 0,
  `avatar` varchar(255) NOT NULL DEFAULT '',
  `usertitle` varchar(255) NOT NULL DEFAULT '',
  `secret_question` varchar(255) NOT NULL DEFAULT '',
  `secret_answer` varchar(64) NOT NULL DEFAULT '',
  `id_theme` tinyint(4) UNSIGNED NOT NULL DEFAULT 0,
  `is_activated` tinyint(3) UNSIGNED NOT NULL DEFAULT 1,
  `validation_code` varchar(10) NOT NULL DEFAULT '',
  `id_msg_last_visit` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `additional_groups` varchar(255) NOT NULL DEFAULT '',
  `smiley_set` varchar(48) NOT NULL DEFAULT '',
  `id_post_group` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
  `total_time_logged_in` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `password_salt` varchar(255) NOT NULL DEFAULT '',
  `ignore_boards` text NOT NULL,
  `warning` tinyint(4) NOT NULL DEFAULT 0,
  `passwd_flood` varchar(12) NOT NULL DEFAULT '',
  `pm_receive_from` tinyint(4) UNSIGNED NOT NULL DEFAULT 1,
  `alerts` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `timezone` varchar(80) NOT NULL DEFAULT '',
  `tfa_secret` varchar(24) NOT NULL DEFAULT '',
  `tfa_backup` varchar(64) NOT NULL DEFAULT '',
  `member_ip` varbinary(16) DEFAULT NULL,
  `member_ip2` varbinary(16) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

Natomiast na nowym czystym forum:

CytatCREATE TABLE `smf_members` (
  `id_member` mediumint(8) UNSIGNED NOT NULL,
  `member_name` varchar(80) NOT NULL DEFAULT '',
  `date_registered` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `posts` mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
  `id_group` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
  `lngfile` varchar(255) NOT NULL DEFAULT '',
  `last_login` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `real_name` varchar(255) NOT NULL DEFAULT '',
  `instant_messages` smallint(6) NOT NULL DEFAULT 0,
  `unread_messages` smallint(6) NOT NULL DEFAULT 0,
  `new_pm` tinyint(3) UNSIGNED NOT NULL DEFAULT 0,
  `alerts` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `buddy_list` text NOT NULL,
  `pm_ignore_list` text DEFAULT NULL,
  `pm_prefs` mediumint(9) NOT NULL DEFAULT 0,
  `mod_prefs` varchar(20) NOT NULL DEFAULT '',
  `passwd` varchar(64) NOT NULL DEFAULT '',
  `email_address` varchar(255) NOT NULL DEFAULT '',
  `personal_text` varchar(255) NOT NULL DEFAULT '',
  `birthdate` date NOT NULL DEFAULT '1004-01-01',
  `website_title` varchar(255) NOT NULL DEFAULT '',
  `website_url` varchar(255) NOT NULL DEFAULT '',
  `show_online` tinyint(4) NOT NULL DEFAULT 1,
  `time_format` varchar(80) NOT NULL DEFAULT '',
  `signature` text NOT NULL,
  `time_offset` float NOT NULL DEFAULT 0,
  `avatar` varchar(255) NOT NULL DEFAULT '',
  `usertitle` varchar(255) NOT NULL DEFAULT '',
  `member_ip` varbinary(16) DEFAULT NULL,
  `member_ip2` varbinary(16) DEFAULT NULL,
  `secret_question` varchar(255) NOT NULL DEFAULT '',
  `secret_answer` varchar(64) NOT NULL DEFAULT '',
  `id_theme` tinyint(3) UNSIGNED NOT NULL DEFAULT 0,
  `is_activated` tinyint(3) UNSIGNED NOT NULL DEFAULT 1,
  `validation_code` varchar(10) NOT NULL DEFAULT '',
  `id_msg_last_visit` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `additional_groups` varchar(255) NOT NULL DEFAULT '',
  `smiley_set` varchar(48) NOT NULL DEFAULT '',
  `id_post_group` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
  `total_time_logged_in` int(10) UNSIGNED NOT NULL DEFAULT 0,
  `password_salt` varchar(255) NOT NULL DEFAULT '',
  `ignore_boards` text NOT NULL,
  `warning` tinyint(4) NOT NULL DEFAULT 0,
  `passwd_flood` varchar(12) NOT NULL DEFAULT '',
  `pm_receive_from` tinyint(3) UNSIGNED NOT NULL DEFAULT 1,
  `timezone` varchar(80) NOT NULL DEFAULT '',
  `tfa_secret` varchar(24) NOT NULL DEFAULT '',
  `tfa_backup` varchar(64) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CrimeS

Kolejność kolumn w bazie danych ma myślę, że nie ma jakiegoś wpływu na instalację modyfikacji.  Natomiast wpływa na wydajność bazy danych i przy większych tabelach jak użytkownicy różnica może być odczuwalna. Na przykład indexy powinny być pierwsze.

Możesz odpalić query i sobie pozamieniać tą kolejność. Fajnie też by wiedzieć skąd wynikła on a kolejność.

cieplutki

zrobiłem w ten sposób że:
zainstalowałem czyściutkie forum, wyeksportowałem sobie pojedyncze tabele do oddzielnych plików sql.
Z starą bazą zrobiłem identycznie.
Dla starej bazy dodałem drop i create, zaimportowałem pojedyncze tabele i tam gdzie miałem inaczej poukładane zmieniłem tak jak w nowej czystej.
Zmiana w stosunku do wersji bazy danych z 2.0.* jest taka że do części tabel jest dodawany:
CytatPRIMARY KEY (`id_msg`),
  UNIQUE KEY `idx_id_board` (`id_board`,`id_msg`,`approved`),
  UNIQUE KEY `idx_id_member` (`id_member`,`id_msg`),
  KEY `idx_ip_index` (`poster_ip`,`id_topic`),
  KEY `idx_parti***tion` (`id_member`,`id_topic`),
  KEY `idx_show_posts` (`id_member`,`id_board`),
  KEY `idx_id_member_msg` (`id_member`,`approved`,`id_msg`),
  KEY `idx_current_topic` (`id_topic`,`id_msg`,`id_member`,`approved`),
  KEY `idx_related_ip` (`id_member`,`poster_ip`,`id_msg`),
  KEY `idx_likes` (`likes`)
w wersji 2.0.* zostało to zrobione w ten sposób że do bazy została dodana tabela: extra.sql
i tam wpisy np:
CytatALTER TABLE `smf_admin_info_files`
  ADD PRIMARY KEY (`id_file`),
  ADD KEY `filename` (`filename`(30));
Trochę trzeba było nad tym posiedzieć.

cieplutki

Sorrki że jeden pod drugim ale ma jeszcze jedno pytanie:
W nowej bazie mam takie wyrarzena:
Cytat`group_type` tinyint(4) NOT NULL DEFAULT 0,
  `hidden` tinyint(4) NOT NULL DEFAULT 0,
  `id_parent` smallint(6) NOT NULL DEFAULT -2,
  `tfa_required` tinyint(4) NOT NULL DEFAULT 0,
w starej
Cytat`group_type` tinyint(3) NOT NULL DEFAULT 0,
  `hidden` tinyint(3) NOT NULL DEFAULT 0,
  `id_parent` smallint(5) NOT NULL DEFAULT -2,
  `tfa_required` tinyint(3) NOT NULL DEFAULT 0,
Czy to ma jakieś znaczenie przy przenosinach?

CrimeS

W tej nowej może więcej wartości iść do poszczególnych pól. Ten numerem nawiasach to maksymalna długość na przykład numeru.