MySQL: руководство профессионала
Шрифт:
По той же самой причине Вы не можете позже добавлять уникальный ключ к разбитой на разделы таблице, если этот ключ не включает все столбцы, используемые выражением выделения разделов таблицы. Рассмотрите разбитую на разделы таблицу, определенную так, как показано здесь:
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));
Возможно
# 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 также не поддерживает индексацию пространственных столбцов.
Хотя пространственные расширения
Эта глава покрывает следующие темы:
Основание этих пространственных расширений в модели геометрии 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, чтобы обратиться к географическим свойствам.