Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przewodnik po projektowaniu bazy danych dla systemu sieci społecznościowych w MySQL

Ten samouczek zawiera kompletne kroki projektowania schematu bazy danych systemu sieci społecznościowych do zarządzania użytkownikami, znajomymi, obserwującymi, grupami i wiadomościami.

Diagram relacji encji lub wizualny projekt bazy danych pokazano poniżej.

Baza danych systemu sieci społecznościowych

Możesz również odwiedzić popularne samouczki, w tym Jak zainstalować MySQL 8 na Ubuntu 20.04 LTS, Jak zainstalować MySQL 8 w systemie Windows, Jak zainstalować MySQL Workbench na Ubuntu, Jak zainstalować MySQL 8 z Workbench na Windows 10, Baza danych RBAC w MySql, Baza danych blogów w MySql, Baza danych quizów w MySQL, Baza ankiet i ankiet w MySQL, Baza danych koszyka zakupów online w MySQL, Baza danych zapasów w MySQL i Nauka podstawowych zapytań SQL w MySQL.

Baza danych systemu sieci społecznościowych

Pierwszym krokiem jest utworzenie bazy danych systemu sieci społecznościowych. Można go utworzyć za pomocą zapytania, jak pokazano poniżej.

CREATE SCHEMA `sns` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Użyłem zestawu znaków utf8mb4 do obsługi szerokiej gamy znaków.

Tabela użytkowników

W tej sekcji zaprojektujemy Tabelę użytkowników do przechowywania informacji o użytkowniku. Poniżej znajduje się opis wszystkich kolumn tabeli użytkowników.

Identyfikator Unikalny identyfikator do identyfikacji użytkownika.
Imię Imię użytkownika.
Drugie imię Drugie imię użytkownika.
Nazwisko Nazwisko użytkownika.
Komórka Numer telefonu komórkowego użytkownika. Może być używany do celów logowania i rejestracji.
Poczta e-mail E-mail użytkownika. Może być używany do celów logowania i rejestracji.
Hash hasła Skrót hasła wygenerowany przez odpowiedni algorytm. Musimy unikać przechowywania zwykłych lub zaszyfrowanych haseł.
Zarejestrowano w Ta kolumna może być użyta do obliczenia życia użytkownika z aplikacją.
Ostatnie logowanie Może być używany do identyfikacji ostatniego logowania użytkownika.
Wprowadzenie Krótkie wprowadzenie Użytkownika.
Profil Szczegóły użytkownika.

Tabela użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`username` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_username` (`username` ASC),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );

Tabela znajomych użytkownika

W tej sekcji zaprojektujemy Tabelę Przyjaciół Użytkownika do przechowywania znajomych użytkownika. Status przyjaciela może służyć do śledzenia statusu przyjaźni, a typ do określenia typu przyjaźni. Poniżej znajduje się opis wszystkich kolumn Tabeli Przyjaciół Użytkownika.

Identyfikator Unikalny identyfikator identyfikujący przyjaźń.
Identyfikator źródła Identyfikator użytkownika do identyfikacji użytkownika, który zainicjował przyjaźń.
Identyfikator docelowy Identyfikator użytkownika znajomego.
Wpisz Typ do klasyfikowania znajomych. Może to być szkoła, college lub znajomy.
Stan Stan może być Nowy, Odrzucony lub Aktywny.
Utworzono w Przechowuje datę i godzinę, w której zainicjowano zaproszenie do znajomych.
Aktualizacja o Przechowuje datę i godzinę aktualizacji zaproszenia do znajomych.
Notatki Przechowuje notatki dotyczące przyjaźni.

Tabela przyjaciół użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`user_friend` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_friend_source` (`sourceId` ASC),
CONSTRAINT `fk_friend_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_friend`
ADD INDEX `idx_friend_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_friend`
ADD CONSTRAINT `fk_friend_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `sns`.`user_friend` ADD UNIQUE `uq_friend`(`sourceId`, `targetId`);

Tabela obserwatorów użytkownika

W tej sekcji zaprojektujemy Tabelę Obserwatorów Użytkownika do przechowywania obserwujących użytkowników. Typ obserwującego może służyć do określenia typu obserwującego wśród Lubię, Nie lubię lub Obserwuj. Poniżej wymieniono opis wszystkich kolumn tabeli Obserwatorzy użytkownika.

Identyfikator Unikalny identyfikator identyfikujący obserwującego.
Identyfikator źródła Identyfikator użytkownika do identyfikacji użytkownika obserwującego.
Identyfikator docelowy Identyfikator użytkownika do identyfikacji następującego użytkownika.
Wpisz Typ do klasyfikacji obserwujących. Może to być Lubię, Nie lubię lub Obserwuj.
Utworzono w Przechowuje datę i godzinę utworzenia obserwującego.
Aktualizacja o Przechowuje datę i godzinę, o której obserwujący został zaktualizowany.

Tabela obserwatorów użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`user_follower` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_ufollower_source` (`sourceId` ASC),
CONSTRAINT `fk_ufollower_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_follower`
ADD INDEX `idx_ufollower_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_follower`
ADD CONSTRAINT `fk_ufollower_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


ALTER TABLE `sns`.`user_follower` ADD UNIQUE `uq_ufollower`(`sourceId`, `targetId`, `type`);

Tabela komunikatów użytkownika

W tej sekcji zaprojektujemy Tabelę komunikatów użytkownika do przechowywania wiadomości czatu użytkownika. Poniżej znajduje się opis wszystkich kolumn tabeli komunikatów użytkownika.

Identyfikator Unikalny identyfikator do identyfikacji wiadomości.
Identyfikator źródła Identyfikator użytkownika do identyfikacji nadawcy.
Identyfikator docelowy Identyfikator użytkownika do identyfikacji odbiorcy.
Wiadomość Treść wiadomości.
Utworzono w Przechowuje datę i godzinę utworzenia wiadomości.
Aktualizacja o Przechowuje datę i godzinę aktualizacji wiadomości.

Tabela komunikatów użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`user_message` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`sourceId` BIGINT NOT NULL,
`targetId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_umessage_source` (`sourceId` ASC),
CONSTRAINT `fk_umessage_source`
FOREIGN KEY (`sourceId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_message`
ADD INDEX `idx_umessage_target` (`targetId` ASC);
ALTER TABLE `sns`.`user_message`
ADD CONSTRAINT `fk_umessage_target`
FOREIGN KEY (`targetId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tabela postów użytkownika

W tej sekcji zaprojektujemy Tabelę postów użytkowników do przechowywania postów użytkownika. Nadawca może być poproszony o zezwolenie innym użytkownikom z odpowiednimi uprawnieniami na publikowanie na tablicy użytkownika. Poniżej znajduje się opis wszystkich kolumn tabeli postów użytkowników.

Identyfikator Unikalny identyfikator do identyfikacji posta.
Identyfikator użytkownika Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika.
Identyfikator nadawcy Identyfikator nadawcy do identyfikacji odpowiedniego nadawcy.
Wiadomość Treść wiadomości.
Utworzono w Przechowuje datę i godzinę utworzenia wpisu.
Aktualizacja o Przechowuje datę i godzinę, o której post został zaktualizowany.

Tabela postów użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`user_post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`senderId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_upost_user` (`userId` ASC),
CONSTRAINT `fk_upost_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`user_post`
ADD INDEX `idx_upost_sender` (`senderId` ASC);
ALTER TABLE `sns`.`user_post`
ADD CONSTRAINT `fk_upost_sender`
FOREIGN KEY (`senderId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tabela grupowa

W tej sekcji zaprojektujemy Tabelę grupową do przechowywania danych grupy. Poniżej znajduje się opis wszystkich kolumn tabeli grup.

Identyfikator Unikalny identyfikator do identyfikacji grupy.
Utworzone przez Identyfikator użytkownika identyfikujący użytkownika, który zarejestrował grupę.
Zaktualizowane przez Identyfikator użytkownika identyfikujący użytkownika, który zaktualizował grupę.
Tytuł Tytuł grupy.
Metatytuł Metatytuł używany do tytułu przeglądarki i celów SEO.
Ślimak Ślad tworzący unikalny adres URL.
Podsumowanie Podsumowanie zawierające najważniejsze informacje.
Stan Stan grupy może być Nowa, Zatwierdzona, Aktywna lub Zablokowana.
Utworzono w Przechowuje datę i godzinę utworzenia grupy.
Aktualizacja o Przechowuje datę i godzinę aktualizacji grupy.
Profil Kolumna używana do przechowywania szczegółów profilu grupy.
Treść Kolumna używana do przechowywania dodatkowych szczegółów grupy.

Używa statusu kolumny do śledzenia statusu grupy. Status może być Nowy, Zatwierdzony, Aktywny lub Zablokowany. Tabela grupowa z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`group` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_group_creator` (`createdBy` ASC),
CONSTRAINT `fk_group_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group`
ADD INDEX `idx_group_modifier` (`updatedBy` ASC);
ALTER TABLE `sns`.`group`
ADD CONSTRAINT `fk_group_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Meta grupy

Metatabela grupowa może być używana do przechowywania dodatkowych informacji o grupach, w tym adresu URL banera grupy itp. Poniżej znajduje się opis wszystkich kolumn metatabeli grupowej.

Identyfikator Unikalny identyfikator do identyfikacji meta grupy.
Identyfikator grupy Identyfikator grupy do identyfikacji grupy nadrzędnej.
Klucz Klucz identyfikujący meta.
Treść Kolumna używana do przechowywania metadanych grupy.

Tabela meta grup z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`group_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_group` (`groupId` ASC),
UNIQUE INDEX `uq_meta_group` (`groupId` ASC, `key` ASC),
CONSTRAINT `fk_meta_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Tabela członków grupy

W tej sekcji zaprojektujemy Tabelę członków grupy do przechowywania członków grupy. Status członka może służyć do śledzenia statusu członkostwa, a rola członka może służyć do identyfikowania uprawnień członka. Poniżej znajduje się opis wszystkich kolumn tabeli członków grupy.

Identyfikator Unikalny identyfikator do identyfikacji członkostwa.
Identyfikator grupy Identyfikator grupy do identyfikacji odpowiedniej grupy.
Identyfikator użytkownika Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika.
Identyfikator roli Rola sprawdzania uprawnień użytkownika.
Stan Stan może być Nowy, Odrzucony, Aktywny lub Zablokowany.
Utworzono w Przechowuje datę i godzinę, w której prośba o członkostwo została zainicjowana.
Aktualizacja o Przechowuje datę i godzinę aktualizacji członka.
Notatki Przechowuje notatki dotyczące członkostwa.

Tabela członków grupy z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`group_member` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_member_group` (`groupId` ASC),
CONSTRAINT `fk_member_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_member`
ADD INDEX `idx_member_user` (`userId` ASC);
ALTER TABLE `sns`.`group_member`
ADD CONSTRAINT `fk_member_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `sns`.`group_member` ADD UNIQUE `uq_friend`(`groupId`, `userId`);

Tabela obserwatorów grupy

W tej sekcji zaprojektujemy Tabelę obserwatorów grupy do przechowywania obserwatorów grupy. Typ obserwatora może być Lubię, Nie lubię lub Obserwuj. Poniżej znajduje się opis wszystkich kolumn tabeli obserwatorów grupy.

Identyfikator Unikalny identyfikator identyfikujący obserwującego.
Identyfikator grupy Identyfikator grupy do identyfikacji odpowiedniej grupy.
Identyfikator użytkownika Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika.
Wpisz Typ obserwatora może być Lubię, Nie lubię lub Obserwuję.
Utworzono w Przechowuje datę i godzinę utworzenia obserwującego.
Aktualizacja o Przechowuje datę i godzinę, o której obserwujący został zaktualizowany.

Tabela obserwatorów grupy z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`group_follower` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gfollower_group` (`groupId` ASC),
CONSTRAINT `fk_gfollower_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_follower`
ADD INDEX `idx_gfollower_user` (`userId` ASC);
ALTER TABLE `sns`.`group_follower`
ADD CONSTRAINT `fk_gfollower_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `sns`.`group_follower` ADD UNIQUE `uq_friend`(`groupId`, `userId`, `type`);

Tabela wiadomości grupowych

W tej sekcji zaprojektujemy Tabelę komunikatów grupowych do przechowywania wiadomości czatu grupowego. Poniżej znajduje się opis wszystkich kolumn tabeli komunikatów grupowych.

Identyfikator Unikalny identyfikator do identyfikacji wiadomości.
Identyfikator grupy Identyfikator grupy do identyfikacji odpowiedniej grupy.
Identyfikator użytkownika Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika.
Wiadomość Treść wiadomości.
Utworzono w Przechowuje datę i godzinę utworzenia wiadomości.
Aktualizacja o Przechowuje datę i godzinę aktualizacji wiadomości.

Tabela komunikatów grupowych z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`group_message` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gmessage_group` (`groupId` ASC),
CONSTRAINT `fk_gmessage_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_message`
ADD INDEX `idx_gmessage_user` (`userId` ASC);
ALTER TABLE `sns`.`group_message`
ADD CONSTRAINT `fk_gmessage_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Tabela postów grupowych

W tej sekcji zaprojektujemy Tabelę postów grupowych do przechowywania postów grupowych. Członkowie posiadający odpowiednią rolę mogą publikować w grupie. Poniżej znajduje się opis wszystkich kolumn tabeli grupowych postów.

Identyfikator Unikalny identyfikator do identyfikacji posta.
Identyfikator grupy Identyfikator grupy do identyfikacji odpowiedniej grupy.
Identyfikator użytkownika Identyfikator użytkownika do identyfikacji odpowiedniego użytkownika.
Wiadomość Treść wiadomości.
Utworzono w Przechowuje datę i godzinę utworzenia wpisu.
Aktualizacja o Przechowuje datę i godzinę, o której post został zaktualizowany.

Tabela wiadomości grupowych z odpowiednimi ograniczeniami jest pokazana poniżej.

CREATE TABLE `sns`.`group_post` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`groupId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`message` TINYTEXT NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_gpost_group` (`groupId` ASC),
CONSTRAINT `fk_gpost_group`
FOREIGN KEY (`groupId`)
REFERENCES `sns`.`group` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `sns`.`group_post`
ADD INDEX `idx_gpost_user` (`userId` ASC);
ALTER TABLE `sns`.`group_post`
ADD CONSTRAINT `fk_gpost_user`
FOREIGN KEY (`userId`)
REFERENCES `sns`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Podsumowanie

W tym samouczku omówiliśmy projekt bazy danych systemu sieci społecznościowych do zarządzania użytkownikami, przyjaciółmi, obserwującymi, wiadomościami i grupami.

Możesz przesłać swoje uwagi, aby dołączyć do dyskusji. Możesz być również zainteresowany zaprojektowaniem bazy danych aplikacji Blog, Koszyk oraz Ankiety i ankiety. Pełny schemat bazy danych jest również dostępny na GitHub.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego MySQL zgłasza błąd składni przy FULL OUTER JOIN?

  2. MySQL kontra MariaDB

  3. Znaczenie MySQL INT

  4. Format daty MySQL DD/MM/RRRR zapytanie wybierające?

  5. Najważniejsze błędy, których należy unikać podczas replikacji MySQL