2010-06-22 11 views
15

Necesito almacenar conversaciones de chat en un esquema de base de datos. La forma en que usaría esta base de datos es publicando chats en un sitio web. Cada chat no tendrá más de 20 respuestas. ¿Alguien puede sugerir un esquema para esto?DB Schema para chats?

+0

chats anónimos o usuarios reconocidos? –

+0

chats anónimos –

Respuesta

16

Esto es un comienzo usando MySQL Workbench

PNG export of ERD

Y la creación de la escritura

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; 

Y le invitamos a descargar el archivo MWB de my dropbox.

+8

No, sigo recibiendo un 404 en el enlace. –

5

Líneas Conversación has_may

Línea belongs_to usuario, tiene un contenido & tiempo

+0

Esto suena tan intensivo en DB. Crees que si tienes 10K usuarios conversando todos los días, estarás inundado de datos en un mes ... – Trip

+1

30 días * 1440 minutos en un día * 200 caracteres por minuto (velocidad promedio de escritura) * 10,000 usuarios chateando = 85 gigabytes (aproximadamente) – thomasfedb

+0

Por supuesto, esto supone que sus usuarios literalmente dedican 24/7 al chat ... En cualquier caso, 85GB probablemente esté dentro de lo que la mayoría de las bases de datos SQL pueden manejar, pero quizás podría considerar purgar las líneas de conversación anteriores a 24 horas , etc. – thomasfedb

Cuestiones relacionadas