2010-06-22 9 views
15

Devo memorizzare le conversazioni di chat in uno schema di database. Il modo in cui userei questo database è che pubblico le chat su un sito web. Ogni chat non sarebbe più di circa 20 risposte. Qualcuno può suggerire uno schema per questo?Schema DB per le chat?

+0

chat anonime o utenti riconosciuti? –

+0

chat anonime –

risposta

16

Ecco un inizio utilizzando MySQL Workbench

PNG export of ERD

E la creazione di script di

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; 

E siete liberi di scaricare il file MWB da my dropbox.

+8

No, ho ancora un 404 sul link. –

5

Lines Conversazione has_may

Linea belongs_to utente, ha contenuto & tempo

+0

Sembra così intensivo per DB. Pensi che se hai 10K di utenti che chattano ogni giorno, sarai inondato di dati entro un mese .. – Trip

+1

30 giorni * 1440 minuti in un giorno * 200 caratteri al minuto (velocità media di battitura) * 10.000 utenti in chat = 85 gigabyte (approssimativamente) – thomasfedb

+0

Ovviamente, questo presuppone che i tuoi utenti dedicano letteralmente 24 ore su 24 alla chat ... In ogni caso, 85 GB è probabilmente in grado di gestire la maggior parte dei database SQL, ma forse potresti prendere in considerazione l'eliminazione delle conversazioni più vecchie di 24 ore , ecc. – thomasfedb