2010-06-22 3 views
15

Мне нужно хранить разговоры чата в схеме базы данных. Как я буду использовать эту базу данных, я бы разместил чаты на веб-сайте. Каждый чат будет не более 20 ответов. Может ли кто-нибудь предложить схему для этого?Схема DB для чатов?

+0

анонимные чаты или узнаваемые пользователи? –

+0

анонимные чаты –

ответ

16

Вот начало использования MySQL Workbench

PNG export of ERD

И создать сценарий

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; 

И вы можете скачать MWB-файл с my dropbox.

+8

Нет, я все еще получаю ссылку 404. –

5

Диалог has_may Линии

Line belongs_to пользователя, имеет содержание & время

+0

Это звучит так интенсивно. Вы думаете, что если у вас 10K пользователей чата каждый день, вы будете завалены данными за месяц. – Trip

+1

30 дней * 1440 минут в день * 200 символов в минуту (средняя скорость набора текста) * 10 000 пользователей в чате = 85 гигабайт (примерно) – thomasfedb

+0

Конечно, это предполагает, что ваши пользователи буквально посвящают 24/7 разговору ... В любом случае, 85GB, вероятно, находится в пределах того, что может обрабатывать большинство баз данных SQL, но, возможно, вы могли бы рассмотреть возможность очистки строк разговора более чем через 24 часа и т. д. – thomasfedb

Смежные вопросы