- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания MySQL: руководство профессионала - Алексей Паутов
Шрифт:
Интервал:
Закладка:
UNIQUE KEY (col1), UNIQUE KEY (col3))
PARTITION BY HASH(col1 + col3) PARTITIONS 4;
CREATE TABLE t3 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
UNIQUE KEY (col1, col2), UNIQUE KEY (col3))
PARTITION BY HASH(col1 + col3) PARTITIONS 4;
В каждом случае, предложенная таблица имела бы по крайней мере один уникальный ключ, который не включает все столбцы, используемые в выражении выделения разделов.
Каждая из следующих инструкций допустима и представляет один способ, которым соответствующая недопустимая инструкция создания таблицы могла бы быть сделана рабочей:
CREATE TABLE t1 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
UNIQUE KEY (col1, col2, col3))
PARTITION BY HASH(col3) PARTITIONS 4;
CREATE TABLE t2 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
UNIQUE KEY (col1, col3))
PARTITION BY HASH(col1 + col3) PARTITIONS 4;
CREATE TABLE t3 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
UNIQUE KEY (col1, col2, col3), UNIQUE KEY (col3))
PARTITION BY HASH(col3) PARTITIONS 4;
Так как каждый первичный ключ по определению уникальный ключ, это ограничение также включает первичный ключ таблицы, если он есть. Например, следующие две инструкции недопустимы:
CREATE TABLE t4 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
PRIMARY KEY(col1, col2))
PARTITION BY HASH(col3) PARTITIONS 4;
CREATE TABLE t5 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
PRIMARY KEY(col1, col3), UNIQUE KEY(col2))
PARTITION BY HASH(YEAR(col2)) PARTITIONS 4;
В обоих случаях первичный ключ не включает все столбцы, названные в выражении выделения разделов. Однако, обе из следующих двух инструкций допустимы:
CREATE TABLE t6 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
PRIMARY KEY(col1, col2))
PARTITION BY HASH(col1 + YEAR(col2)) PARTITIONS 4;
CREATE TABLE t7 (col1 INT NOT NULL, col2 DATE NOT NULL,
col3 INT NOT NULL, col4 INT NOT NULL,
PRIMARY KEY(col1, col2, col4), UNIQUE KEY(col2, col1))
PARTITION BY HASH(col1 + YEAR(col2)) PARTITIONS 4;
Если таблица не имеет никакого уникального или первичного ключа, то это ограничение не применяется, и Вы можете использовать любой столбец или столбцы в выражении выделения разделов, пока тип столбца совместим с типом выделения разделов.
По той же самой причине Вы не можете позже добавлять уникальный ключ к разбитой на разделы таблице, если этот ключ не включает все столбцы, используемые выражением выделения разделов таблицы. Рассмотрите разбитую на разделы таблицу, определенную так, как показано здесь:
CREATE TABLE t_no_pk (c1 INT, c2 INT)
PARTITION BY RANGE(c1) (PARTITION p0 VALUES LESS THAN (10),
PARTITION p1 VALUES LESS THAN (20),
PARTITION p2 VALUES LESS THAN (30),
PARTITION p3 VALUES LESS THAN (40));
Возможно добавить первичный ключ к t_no_pk, используя любую из этих инструкций ALTER TABLE:
# possible PK
ALTER TABLE t_no_pk ADD PRIMARY KEY(c1);
# also a possible PK
ALTER TABLE t_no_pk ADD PRIMARY KEY(c1, c2);
Однако, следующие операторы свалятся потому, что c1 представляет собой часть ключа выделения разделов, но не часть предложенного первичного ключа:
# fails with ERROR 1482
ALTER TABLE t_no_pk ADD PRIMARY KEY(c2);
С тех пор как t_no_pk имеет только c1 в
выражении выделения разделов, попытка добавления уникального ключа на c2 всегда провалится. Однако, Вы можете добавлять уникальный ключ, который использует c1 и c2.
Эти правила также относятся к существующим не разбитым на разделы таблицам, в которых Вы желаете выделить разделы используя ALTER TABLE … PARTITION BY. Рассмотрите таблицу np_pk:
CREATE TABLE np_pk (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
added DATE, PRIMARY KEY (id)
);
Следующяя инструкция ALTER TABLE потерпит неудачу с ошибкой, потому что столбец added не является частью любого
уникального ключа в таблице:
ALTER TABLE np_pk PARTITION BY HASH(TO_DAYS(added)) PARTITIONS 4;
Эта инструкция, однако, была бы полностью допустима:
ALTER TABLE np_pk PARTITION BY HASH(id) PARTITIONS 4;
В случае np_pk единственный столбец, который может использоваться как часть выражения выделения разделов, id. Если Вы желаете выделить разделы этой таблицы, использующие любой другой столбец или столбцы в выражении выделения разделов, Вы должны сначала изменить таблицу, добавляя желательный столбец или столбцы на первичный ключ или удаляя первичный ключ в целом.
Подразделы ограничены выделением разделов HASH или KEY. Разделы HASH и KEY не могут быть
подразбиты на разделы.
Глава 4. Пространственные расширения
MySQL поддерживает пространственные расширения, чтобы позволить хранение и анализ географических свойств. Эти свойства доступны для таблиц типов MyISAM, InnoDB, NDB и ARCHIVE. Однако, тип ARCHIVE не поддерживает индексацию, так что пространственные столбцы в столбцах ARCHIVE не могут быть индексированы. MySQL Cluster также не поддерживает индексацию пространственных столбцов.
Хотя пространственные расширения обеспечиваются в таблицах InnoDB, использование пространственных индексов может вызывать аварийный отказ (Глюк #15860).
Эта глава покрывает следующие темы:
Основание этих пространственных расширений в модели геометрии OpenGIS.
Форматы для представления пространственных данных.
Как использовать пространственные данные в MySQL.
Использование индексации для пространственных данных.
Отличия MySQL от спецификации OpenGIS.
Дополнительные ресурсы
Open Geospatial Consortium издает OpenGIS Simple Features Specifications For SQL, документ, который предлагает несколько концептуальных способов для распространения SQL RDBMS, чтобы поддерживать пространственные данные. Эта спецификация доступна на http://www.opengis.org/docs/99-049.pdf.
Если Вы имеете вопросы или интересы относительно использования пространственных расширений MySQL, Вы можете обсуждать их на форуме GIS: http://forums.mysql.com/list.php?23.
4.1. Введение в пространственную поддержку MySQL
MySQL осуществляет пространственные расширения по спецификации Open Geospatial Consortium (OGC). Это международный консорциум более, чем 250 компаний, агентств и университетов, участвующих в разработке публично доступных концептуальных решений, которые могут быть полезны со всеми видами прикладных программ, которые управляют пространственными данными. OGC поддерживает Web-сайт http://www.opengis.org/.
В 1997 Open Geospatial Consortium опубликовал OpenGIS Simple Features Specifications For SQL. Эта спецификация доступна на http://www.opengis.org/docs/99-049.pdf.
MySQL осуществляет подмножество типов SQL with Geometry Types, среду, предложенную OGC. Этот термин относится к SQL-среде, которая была расширена с набором типов геометрии. Оцененный геометрией SQL столбец выполнен как столбец, который имеет тип геометрии. Спецификация описывает набор SQL-типов геометрии также, как функций на этих типах, чтобы создавать и анализировать значения геометрии.
Географическее свойство состоит в том, что есть что-нибудь в мире, имеющее расположение. Свойство может быть:
Объект. Например, гора, водоем, город.
Пустота. Например, область почтового индекса, тропики.
Определимое расположение. Например, дорога, как специфическое место, где два прохода пересекаются.
Некоторые документы используют термин geospatial feature, чтобы обратиться к географическим свойствам.
Geometry другое слово, которое обозначает географическее свойство. Первоначально геометрия означала измерение земли. Другое значение исходит от картографии, оно касается геометрических свойств, которые картографы используют, чтобы отобразить мир.
Эта глава использует все эти условия синонимично: geographic feature, geospatial feature, feature или geometry. Обычно используется геометрия, определенная как отметка или набор пунктов (точек), представляющих что-нибудь в мире, что имеет расположение.
4.2. Модель геометрии OpenGIS
Набор типов геометрии, предложенных окружением OGC SQL with Geometry Types основан на OpenGIS Geometry Model. В этой модели каждый геометрический объект имеет следующие общие реквизиты:
Это связано с пространственной системой ссылки, которая описывает координаты места, в котором объект определен.
Это принадлежит некоторому классу геометрии.
4.2.1. Иерархия класса геометрии
Классы геометрии определяют свою иерархию следующим образом:
Geometry (non-instantiable)
Point (instantiable)
Curve (non-instantiable)
LineString (instantiable)
Line
LinearRing
Surface (non-instantiable)
Polygon (instantiable)
GeometryCollection (instantiable)
MultiPoint (instantiable)
MultiCurve (non-instantiable)
MultiLineString (instantiable)
MultiSurface (non-instantiable)
MultiPolygon (instantiable)
Невозможно создать объекты в non-instantiable классах. Возможно создать объекты в классах instantiable. Все классы имеют реквизиты, и классы instantiable могут также иметь утверждения (правила, которые определяют допустимые образцы класса).