2010-06-22 20 views
15

Potrzebuję przechowywać rozmowy na czacie w schemacie bazy danych. Sposób, w jaki korzystałbym z tej bazy danych, polegałby na publikowaniu czatów na stronie internetowej. Każdy czat nie będzie więcej niż około 20 odpowiedzi. Czy ktoś może zaproponować schemat tego?Schemat DB dla czatów?

+0

anonimowe czaty lub rozpoznawani użytkownicy? –

+0

anonimowe rozmowy –

Odpowiedz

16

Oto początek użyciu MySQL Workbench

PNG export of ERD

I Utwórz skrypt

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL'; 

CREATE SCHEMA IF NOT EXISTS `chats` DEFAULT CHARACTER SET utf8 COLLATE default collation ; 

-- ----------------------------------------------------- 
-- Table `chats`.`chat` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `chats`.`chat` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`id`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `chats`.`chat_user` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `chats`.`chat_user` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `handle` VARCHAR(45) NOT NULL , 
    PRIMARY KEY (`id`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `chats`.`chat_line` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `chats`.`chat_line` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `chat_id` INT UNSIGNED NOT NULL , 
    `user_id` INT UNSIGNED NOT NULL , 
    `line_text` TEXT NOT NULL , 
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
    PRIMARY KEY (`id`) , 
    INDEX `fk_chat_line_chat` (`chat_id` ASC) , 
    INDEX `fk_chat_line_chat_user1` (`user_id` ASC) , 
    CONSTRAINT `fk_chat_line_chat` 
    FOREIGN KEY (`chat_id`) 
    REFERENCES `chats`.`chat` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_chat_line_chat_user1` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `chats`.`chat_user` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 



SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

Zapraszamy do pobrania pliku MWB z my dropbox.

+8

Nie, nadal otrzymuję link 404. –

5

Rozmowa has_may Linie

Linia belongs_to użytkownika, zawiera treści & czas

+0

To brzmi tak intensywnie DB. Wydaje Ci się, że jeśli masz codziennie 10 000 użytkowników, będziesz w ciągu miesiąca zapełniany danymi. – Trip

+1

30 dni * 1440 minut dziennie * 200 znaków na minutę (średnia szybkość pisania) * 10 000 użytkowników na czacie = 85 gigabajtów (w przybliżeniu) – thomasfedb

+0

Oczywiście zakłada to, że Twoi użytkownicy dosłownie poświęcają 24/7 na czatowanie ... W każdym razie 85 GB jest prawdopodobnie w zasięgu większości baz danych SQL, ale może warto rozważyć oczyszczenie linii konwersacji starszych niż 24 godziny itp. – thomasfedb