|
Программирование >> Реализация баз данных
Занятие я 01гранйчёнйй обеспечивающих целостность \ 57 Ограничения UNIQUE Ограничение UNIQUE позволяет запретить ввод повторяющихся значений в некоторые столбцы, не участвуюшие в формировании цервичного ключа. Несмотря на то, что уникальность обеспечивают оба ограничения - и UNIQUE, и PRIMARY KEY, в некоторых вместо ограничения PRIMARY KEY следует использовать ограничение QUE. Так поступают, если: столбец (или комбинация столбцов) не является первичным ключом. Для таблицы можно определить несколько ограничений UNIQUE и лишь одно ограничение PRIMARY KEY; столбец допускает пустые значения. Ограничения UNIQUE разрешается определить для столбцов, допускающих пустые значения, в то время как ограничения KEY можно определить только для столбцов, не допускающих пустые значения. Ограничение FOREIGN KEY также может ссылаться на ограничение UNIQUE. Создание ограничений UNIQUE Ограничение UNIQUE создается так же, как PRIMARY KEY: при создании таблицы (в составе определения таблицы); путем добавления ксушествуюшей таблице при условии, что столбцы, составляющие ограничение UNIQUE, содержат только пустые и уникальные значения. В таблице может быть несколько ограничений UNIQUE. Для создания ограничения UNIQUE предназначены те же операторы что и для создания ограничения PRIMARY KEY. Просто замените слова PRIMARY KEY словом UNIQUE. Как и в случае PRIMARY KEY, определение ограничения UNIQUE разрешается модифицировать или удалять. Когда ограничение U N iQ U L добавляется к существующему столбцу (или столбцам), в котором есть или пустые значения, SQL Server 2000 проверяет умол- чанию) имеющиеся в столбцах данные, чтобы гарантировать уника1ЬНость всех значений, кроме пустых. Если ограничение QUE добавляется к столбцу, в котором есть luirro-ряющиеся значения, SQL Server возвращает и не добавляет ограничение. SQL Server автоматически создает индекс UNIQUE, чтобы обеспечить соответствие требованию уникальности, которое выдвигает ограничение UNIQUE. Поэтому при попытке вставить повторяющуюся строку SQL Server возвращает об ошибке, в котором говорится, что нарушено ограничение UNIQUE, и не добавляет строку в таблицу. Если отсутствует явно заданный кластерный индекс, по умолчанию создается уникальный некластерный индекс, реализующий ограничение UNIQUE. Ограничения FOREIGN KEY Внешний ключ - это столбец или комбинация столбцов, которая используется для установления и обеспечения связи между данными двух таблиц. Связь между двумя таблицами устанавливается путем добавления к одной из таблиц столбца (столбцов) и опре деления для него ограничения FOREIGN KEY. Этот столбец содержит значения первичного ключа из второй таблицы. В таблице может быть несколько ограничений FOREIGN KEY. Например, у таблицы Titles из базы данных Pubs есть связь с таблицей Publishen. поскольку существует логическая связь между книгами и издательствами. Столбец в таблице Titles соответствует столбцу с первичным ключом таблицы Publishers (рис. 5-3). Столбец pubjd в таблице Titles - это внещний ключ для таблицы Publishers. целостности данных Глава 5 Пврвнчный-ключ pubtlBher pubjd pub name city state ~ country Внешний КЛЮЧ- title Jd titie pub id price advance royalty ytd sales notes pubdate Можно создать внешний ключ уделив ограничение FOREIGN KEY во время создания или изменения таблицы, В дополнение к PRIMARY KEY, ограничение FOREIGN KEY также может ссылаться на столбцы ограничения UNIQUE в других таблицах. Ограничение FOREIGN KEY может содержать пустые значения. Однако если любой из составного ограничения FOREIGN KEY содержит пустые значения, провер- ка этого ограничения не выполняется. Примечай Hti Ограничение FOREIGN KEY може аться на столбцы других таблиц этой базы данных или на другие столбцы этой же таблицы (таблицы, ссылающиеся сами на себя). Хотя основное назначение ограничения FOREIGN KEY - контроль данных, которые могут быть сохранены в таблице с внешним ключом, оно также выявляет изменение данных в таблице с первичным ключом. Например, если из таблицы Publishers удалить строку со сведениями об издательстве, в то время как идентификатор этого издательства зуется для книг в таблице Titles, ссылочная целостность между этими двумя нарушится. Книги енные удаленным издательством, зависнут в таблице Titles без ссьшки на данные таблицы Publishers. Ограничение FOREIGN KEY не допускает подобное iiunH. Это ограничение обеспечивает ссылочную целостность, гарантируя, что в таблицу с первичным ключом невозможно внести такие изменения, которые сделают недействительной ссылку на данные с внешним ключом. Попытка удаления стро- ки из таблицы с первичным ключом или значения первичного ключа закон- чится неудачей, если удаляемое или изменяемое значение первичного ключа соответствует значению ограничения FOREIGN KEY другой таблицы. Чтобы успешно изменить или удалить строку, сначала необходимо удалить или изменить данные внешнего ключа из таблицы с внешним ключом, в результате чего внешний ключ будет связан с другими данными первичного ключа. Создание ограничений FOREIGN KEY Ограничение FOREIGN KEY создают одним из следующих методов: i!; время создание ицы (в составе определения таблицы); добавлением к существующей таблице при условии, что ограничение FOREIGN KEY связано с существующим ограничением PRIMARY KEY или из другой (или это - таблицы. Созданные ограничения FOREIGN KEY разрешается модифицировать и удалять. Например, при желании можно заменить столбцы, на которые ссылается ограничение FOREIGN KEY. Длину для которого определено ограничение FOREIGN KEY, изменить нельзя. Примечание Чтобы модифицировать ограничение FOREIGN с помощью Transact-SQL, сначала следует удалить определение ограничения FOREIGN KEY, а затем создать новое Следующий оператор CREATE TABLE создает таблицу Tablel и определяет для столбца Со12 ограничение FOREIGN KEY, которое ссылается на столбец EmployeelD, являющийся в таблице Employees столбцом с первичным ключом: CREATE TABLE Tablel Coll INT PRIMARY KEY Col2 INT REFERENCES EmployeesCEmployeelD) ) Это же ограничение можно создать, определив его на уровне таблицы: CREATE TABLE Tablel Coll INT PRIMARY KEY, Col2 INT, CONSTRAINT .:ol2 fk FOREIGN KEY (Col2) REFERENCES Employees (EmployeelD) Ограничение FOREIGN KEY к существующей таблице добавляют с помощью оператора ALTER TABLE: ALTER TABLE Tablel ADD CONSTRAINT ? fl-: FOREIGN KEY (Col2) REFERENCES Employees (EmployeelD) Когда ограничение FOREIGN KEY добавляется к существующему столбцу (или .;тол- бцам), SQL Server 2000 проверяет (по умолчанию) имеющиеся в столбцах данные, чтобы гарантировать, что все значения, кроме пустых, существуют в столбцах с PRIMARY KEY или UNIQUE, на которые ссьглается FOREIGN KEY. Однако можно сделать так, чтобы SQL Server не сверял данные столбца с новым ограничением, и SQL Server добавить новое ограничение независимо от данных столбца. Эта возможность полезна в тех случаях, когда существующие данные уже соответствуют новому нию FOREIGN KEY или когда бизнес-правило требует, чтобы ограничение действовало, начиная с этого момента. Однако следует соблюдать осторожность при добавлении ограничения без проверки данных, поскольку это действие совершается в обход контроля SQL Server, обеспечивающего целостность данных таблицы. Отключение ограничений FOREIGN KEY Следует отключать существующие ограничения FOREIGN KEY при выполнении следую-щихдействий: Следует отключить ограничение FOREIGN KEY на время выполнения операторов INSERT и UPDATE, если известно, что новые данные нарушат эти ограничения, или если ограничения должны
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |