Базовая модель ключа с двумя ключами/индексами

Зависимости

  • Нет зависимостей

Рассмотрим простой пример применения модели ключевым полем которого является связка из 2-х полей.
Пусть у нас есть таблица где хранятся статьи сайта на разных языках, т.е. при заходе по ссылкам:
www.example.com/articles?id=1001 и www.example.com/ru/articles?id=1001
Мы видим одну и туже статью с id=1001 только в первом случае на английском (DEF_LANG = en) а во втором на русском
При такой структуре, очевидно, что получение уникальной статьи зависит от article_id и lang_id, т.е. связка этих ключей даёт нам уникальную запись в БД.
Следовательно здесь мы и применяем модель ключевое поле которой является связкой по двум ключам.

        class ArticleTextModel extends ModelDoubleIndex
        {
            protected function CreateTable()
            {
                $this->db->query("CREATE TABLE IF NOT EXISTS ?#
                                 (
                                    `article_id` INT, 
                                    `lang_id`    INT NOT NULL, 
   
                                    `title`  VARCHAR(1024)  CHARACTER SET utf8 COLLATE utf8_general_ci, 
                                    `short`  VARCHAR(2048)  CHARACTER SET utf8 COLLATE utf8_general_ci, 
                                    `full`   VARCHAR(4096)  CHARACTER SET utf8 COLLATE utf8_general_ci, 
   
                                    PRIMARY KEY (`article_id`, `lang_id`) 
                                 ) AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;",
                                    $this->table
                                 );
            }
       
            public function __construct($article_id = NULL, $lang_id = NULL, $onlyShow = false)
            {
                global $g_databases;
                parent::__construct($g_databases->db, "article_texts", "article_id", $article_id, "lang_id", $lang_id, $onlyShow);
            }
        };