Ключи sql
Содержание:
- Процесс установки боксовой системы охлаждения
- При помощи Microsoft Equation 3.0
- Создание таблиц
- пример
- Пример приведения таблицы ко второй нормальной форме
- Ссылочные действия
- Как узнать, сколько памяти на видеокарте?
- Удалить первичный ключ
- Внешний ключ и целостность данных в БД
- Типы связей и их реализация. Ссылочная целостность и ее обеспечение.
- Простой и составной первичный ключ
Процесс установки боксовой системы охлаждения
Затянул немного с предисловием, но для многих этот факт должен стать полезным материалом для раздумий. Теперь приступим к самому процессу инсталляции и начнем с боксовых вертушек.
Если у вас система на чипе Intel, начиная сокетом 775 и выше, то дело проще некуда. Во-первых, стоковые вентиляторы, которые лежат в коробке с чипом, уже смазаны термопастой, а потому дополнительно ее наносить не надо. Но если сильно хочется, то можете заглянуть вот сюда и почитать о том, сколько ее должно быть в идеале.
Дальше все просто: устанавливаете карлсона согласно 4 отверстиям и вставляете в них 4 пластиковых защелки. Все готово – вы восхитительны.Теперь поговорим об AMD и их защелках, которые, к слову, и выглядят гораздо надежней, и держатся как советские шпионы. Вокруг сокета процессора находится пластиковая квадратная вставка с двумя «язычками», за которые и цепляется радиатор боксовой вертушки.
Вам надо всего лишь закинуть ушко за одну проушину, а потом проделать то же самое со второй, параллельно фиксируя карлсона в определенном положении специальным ограничителем. Такую конструкцию потом зубами не оторвешь.
При помощи Microsoft Equation 3.0
Стоит сразу сказать, что данный способ для вставки знака корня в документ отлично подходит как для соответствия всем нормам, так и для применения его во всех версиях программы. А пользоваться мы будем инструментом под названием Microsoft Equation 3.0.
Для начала необходимо открыть интерфейс самой утилиты, для этого:
- Перейдите во вкладку “Вставка”.
- В группе инструментов “Текст” нажмите по кнопке “Объекты”.
- В появившемся окне выберите “Microsoft Equation 3.0”, который находится в списке “Тип объекта”.
- Нажмите кнопку “ОК”.
После этого в месте где был установлен курсор, появится форма для заполнения
Обратите внимание также на то, что внешний вид “Ворда” довольно сильно поменяется
Для вставки знака корня вам необходимо в окне инструментов “Формула” нажать на кнопку “Шаблоны дробей и радикалов”. Ее расположение вы можете наблюдать на изображении ниже.
Теперь в выпадающем списке нужно выбрать соответствующий шаблон. После этого в поле для набора формул появится знак корня, а рядом с ним пустая ячейка, в которую можно вводить число. После того как число было введено, переключится на стандартный интерфейс программы можно, нажав левую кнопку мыши (ЛКМ) за пределами формы для ввода формул.
Создание таблиц
Последнее обновление: 26.06.2017
Ключевым объектом в базе данных являются таблицы. Таблицы состоят из строк и столбцов. Столбцы определяют тип информации, которая хранится, а строки содержат
значения для этих столбцов.
В прошлой теме была создана база данных university. Теперь определим в ней первую таблицу. Опять же для создания таблицы в SQL Server Management Studio
можно применить скрипт на языке SQL, либо воспользоваться графическим дизайнером. В данном случае выберем второе.
Для этого раскроем узел базы данных university в SQL Server Management Studio, нажмем на его подузел Tables
правой кнопкой мыши и далее в контексто меню выберем New -> Table…:
После этого нам откроется дизайнер таблицы. В центральной части в таблице необходимо ввести данные о столбцах таблицы. Дизайнер содержит три поля:
-
Column Name: имя столбца
-
Data Type: тип данных столбца. Тип данных определяет, какие данные могут храниться
в этом столбце. Например, если столбец представляет числовой тип, то он может хранить только числа. -
Allow Nulls: может ли отсутствовать значение у столбца, то есть может ли он быть пустым
Допустим, нам надо создать таблицу с данными учащихся в учебном заведении. Для этого в дизайнере таблицы четыре столбца: Id, FirstName, LastName и Year, которые будут представлять
соответственно уникальный идентификатор пользователя, его имя, фамилию и год рождения. У первого и четвертого столбца надо указать тип int (то есть целочисленный), а у столбцов FirstName и LastName — тип nvarchar(50)
(строковый).
Затем в окне Properties, которая содержит свойства таблицы, в поле Name надо ввести имя таблицы — Students, а в
поле Identity ввести Id, то есть тем самым указывая, что столбец Id будет идентификатором.
Имя таблицы должно быть уникальным в рамках базы данных. Как правило, название таблицы отражает название сущности, которая в ней хранится. Например,
мы хотим сохранить студентов, поэтому таблица называется Students (слово студент во множественном числе на английском языке). Существуют
разные мнения по поводу того, стоит использовать название сущности в единственном или множественном числе (Student или Students). В данном случае вопрос наименования таблицы всецело ложится на разработчика базы данных.
И в конце нам надо отметить, что столбец Id будет выполнять роль первичного ключа (primary key).
Первичный ключ уникально идентифицирует каждую строку. В роли первичного ключа может выступать один столбец, а может и несколько.
Для установки первичного ключа нажмем на столбец Id правой кнопкой мыши и в появившемся меню выберем пункт Set Primary Key.
После этого напротив поля Id должен появиться золотой ключик. Этот ключик будет указывать, что столбец Id будет выполнять роль
первичного ключа.
И после сохранения в базе данных university появится таблица Students:
Мы можем заметить, что название таблицы на самом деле начинается с префикса dbo. Этот префикс представляет схему.
Схема определяет контейнер, который хранит объекты. То есть схема логически разграничивает базы данных. Если схема явным образом не указывается при создании объекта, то объект принадлежит
схеме по умолчанию — схеме dbo.
Нажмем правой кнопкой мыши на название таблицы, и нам отобразится контекстное меню с опциями:
С помощью этих опций можно управлять таблицей. Так, опция Delete позволяет удалить таблицу. Опция Design откроет окно дизайнера таблицы,
где мы можем при необходимости внести изменения в ее структуру.
Для добавления начальных данных можно выбрать опцию Edit Top 200 Rows. Она открывает в виде таблицы 200 первых строк и
позволяет их изменить. Но так как у нас таблица только создана, то естественно в ней будет никаких данных. Введем пару строк — пару студентов, указав
необходимые данные для столбцов:
В данном случае я добавил две строки.
Затем опять же по клику на таблицу правой кнопкой мыши мы можем выбрать в контекстном меню пункт Select To 1000 Rows,
и будет запущен скрипт, который отобразит первые 1000 строк из таблицы:
НазадВперед
пример
В качестве первого примера для иллюстрации внешних ключей предположим, что в базе данных учетных записей есть таблица со счетами-фактурами, и каждый счет-фактура связан с определенным поставщиком. Детали поставщика (например, имя и адрес) хранятся в отдельной таблице; каждому поставщику дается «номер поставщика» для его идентификации. Каждая запись счета-фактуры имеет атрибут, содержащий номер поставщика для этого счета-фактуры. Тогда «номер поставщика» является первичным ключом в таблице «Поставщик». Внешний ключ в таблице Invoices указывает на этот первичный ключ. Реляционная схема следующая. Первичные ключи выделены жирным шрифтом, а внешние ключи — курсивом.
Supplier ( SupplierNumber, Name, Address, Type ) Invoices ( InvoiceNumber, SupplierNumber, Text )
Соответствующий оператор языка определения данных выглядит следующим образом.
CREATE TABLE Supplier ( SupplierNumber INTEGER NOT NULL, Name VARCHAR(20) NOT NULL, Address VARCHAR(50) NOT NULL, Type VARCHAR(10), CONSTRAINT supplier_pk PRIMARY KEY(SupplierNumber), CONSTRAINT number_value CHECK (SupplierNumber > ) ) CREATE TABLE Invoices ( InvoiceNumber INTEGER NOT NULL, SupplierNumber INTEGER NOT NULL, Text VARCHAR(4096), CONSTRAINT invoice_pk PRIMARY KEY(InvoiceNumber), CONSTRAINT inumber_value CHECK (InvoiceNumber > ), CONSTRAINT supplier_fk FOREIGN KEY(SupplierNumber) REFERENCES Supplier(SupplierNumber) ON UPDATE CASCADE ON DELETE RESTRICT )
Пример приведения таблицы ко второй нормальной форме
Представим, что нам нужно хранить список сотрудников организации, и для этого мы создали следующую таблицу.
Таблица сотрудников в первой нормальной форме.
ФИО | Должность | Подразделение | Описание подразделения |
Иванов И.И. | Программист | Отдел разработки | Разработка и сопровождение приложений и сайтов |
Сергеев С.С. | Бухгалтер | Бухгалтерия | Ведение бухгалтерского и налогового учета финансово-хозяйственной деятельности |
John Smith | Продавец | Отдел реализации | Организация сбыта продукции |
Мы видим, что она удовлетворяет условиям первой нормальной формы, т.е. в ней нет дублирующих строк и все значения атомарны.
Теперь мы можем начать процесс нормализации этой таблицы до второй нормальной формы.
Что для этого нам нужно сделать? Нам нужно внедрить первичный ключ.
Поработав немного с предметной областью, мы выясняем, что в этой организации каждому сотруднику присваивается уникальный табельный номер, который никогда не будет изменен.
Поэтому очевидно, что для таблицы, которая будет хранить список сотрудников, первичным ключом может выступать табельный номер, зная который мы можем четко идентифицировать каждого сотрудника, т.е. каждую строку нашей таблицы. Если бы такого табельного номера у нас не было или в рамках организации он мог повторяться (например, сотрудник уволился, и спустя время его номер присвоили новому сотруднику), то для первичного ключа мы могли бы создать искусственный ключ с целочисленным типом данных, который автоматически увеличивался бы в случае добавления новых записей в таблицу. Тем самым мы бы точно также четко идентифицировали каждую строку в таблице.
Таким образом, чтобы привести эту таблицу ко второй нормальной форме, мы должны добавить в нее еще один атрибут, т.е. столбец с табельным номером.
Таблица сотрудников во второй нормальной форме с простым первичным ключом.
Табельный номер | ФИО | Должность | Подразделение | Описание подразделения |
1 | Иванов И.И. | Программист | Отдел разработки | Разработка и сопровождение приложений и сайтов |
2 | Сергеев С.С. | Бухгалтер | Бухгалтерия | Ведение бухгалтерского и налогового учета финансово-хозяйственной деятельности |
3 | John Smith | Продавец | Отдел реализации | Организация сбыта продукции |
В результате, так как наш первичный ключ является простым, а не составным, наша таблица автоматически переходит во вторую нормальную форму.
Иными словами, если первичный ключ простой (не составной, т.е. состоящий из одного столбца), второе требование, которое предъявляется к таблицам для перехода во вторую нормальную форму, выполнять не требуется, так как оно относится только к таблицам, у которых первичный ключ составной.
Ссылочные действия
Поскольку система управления базой данных применяет ссылочные ограничения, она должна гарантировать целостность данных, если строки в ссылочной таблице должны быть удалены (или обновлены). Если зависимые строки в ссылочных таблицах все еще существуют, эти ссылки необходимо учитывать. SQL: 2003 определяет 5 различных ссылочных действий, которые должны выполняться в таких случаях:
КАСКАД
Каждый раз, когда строки в родительской (указанной) таблице удаляются (или обновляются), соответствующие строки дочерней (ссылающейся) таблицы с соответствующим столбцом внешнего ключа также будут удалены (или обновлены). Это называется каскадным удалением (или обновлением).
ОГРАНИЧЕНИЕ
Значение нельзя обновить или удалить, если в ссылочной или дочерней таблице существует строка, которая ссылается на значение в ссылочной таблице.
Точно так же нельзя удалить строку, если на нее есть ссылка из ссылающейся или дочерней таблицы.
Чтобы лучше понять RESTRICT (и CASCADE), может быть полезно заметить следующую разницу, которая может быть не сразу очевидна. Ссылочное действие CASCADE изменяет «поведение» самой (дочерней) таблицы, в которой используется слово CASCADE. Например, ON DELETE CASCADE эффективно говорит: «Когда указанная строка удаляется из другой таблицы (главной таблицы), удалить также и из меня ». Однако ссылочное действие RESTRICT изменяет «поведение» главной таблицы, а не дочерней таблицы, хотя слово RESTRICT появляется в дочерней таблице, а не в главной таблице! Итак, ON DELETE RESTRICT эффективно говорит: «Когда кто-то пытается удалить строку из другой таблицы (главной таблицы), предотвращайте удаление из этой другой таблицы (и, конечно, также не удаляйте из меня, но это не главное. Вот).»
RESTRICT не поддерживается в Microsoft SQL 2012 и более ранних версиях.
БЕЗДЕЙСТВИЕ
ОТСУТСТВИЕ ДЕЙСТВИЙ и ОГРАНИЧЕНИЕ очень похожи. Основное различие между NO ACTION и RESTRICT состоит в том, что при NO ACTION проверка ссылочной целостности выполняется после попытки изменить таблицу. RESTRICT выполняет проверку перед попыткой выполнения оператора UPDATE или DELETE . Оба ссылочных действия действуют одинаково, если проверка ссылочной целостности не удалась: оператор UPDATE или DELETE приведет к ошибке.
Другими словами, когда оператор UPDATE или DELETE выполняется для указанной таблицы с использованием ссылочного действия NO ACTION, СУБД проверяет в конце выполнения оператора, что ни одно из ссылочных отношений не нарушено. Это отличается от RESTRICT, который изначально предполагает, что операция нарушит ограничение. При использовании NO ACTION триггеры или семантика самого оператора могут привести к конечному состоянию, в котором никакие отношения внешнего ключа не нарушаются к моменту окончательной проверки ограничения, что позволяет успешно завершить выполнение инструкции.
УСТАНОВИТЬ ПО УМОЛЧАНИЮ, УСТАНОВИТЬ NULL
В общем, действие, предпринимаемое СУБД для SET NULL или SET DEFAULT, одинаково как для ON DELETE, так и для ON UPDATE: значение затронутых ссылочных атрибутов изменяется на NULL для SET NULL и на указанное значение по умолчанию для SET DEFAULT. .
Триггеры
Ссылочные действия обычно реализуются как подразумеваемые триггеры (т. Е. Триггеры с именами, сгенерированными системой, часто скрытыми). Таким образом, они подвержены тем же ограничениям, что и пользовательские триггеры, и может потребоваться изменить порядок их выполнения относительно других триггеров. считается; в некоторых случаях может возникнуть необходимость заменить ссылочное действие его эквивалентным пользовательским триггером, чтобы обеспечить надлежащий порядок выполнения или обойти ограничения мутирующей таблицы.
Другое важное ограничение связано с изоляцией транзакции : ваши изменения в строке могут быть не в состоянии полностью каскадно, потому что на эту строку ссылаются данные, которые ваша транзакция не может «видеть» и, следовательно, не может каскадировать. Пример: пока ваша транзакция пытается изменить нумерацию учетной записи клиента, одновременная транзакция пытается создать новый счет для того же клиента; хотя правило CASCADE может исправить все строки счета-фактуры, которые может видеть ваша транзакция, чтобы они соответствовали перенумерованной строке клиента, оно не будет затрагивать другую транзакцию, чтобы исправить данные там; поскольку база данных не может гарантировать согласованность данных при фиксации двух транзакций, одна из них будет вынуждена откатиться (часто в порядке очереди).
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
Как узнать, сколько памяти на видеокарте?
Видеокарта является неотъемлемой частью любого компьютера и без нее было бы невозможно передать изображение на монитор. В современных компьютерах используется как встроенная видеокарта (она интегрирована в материнскую плату), так и в виде дополнительного модуля.
Для работы на ПК вполне достаточно встроенного видеоадаптера, а вот для работы в графических приложениях и для игр обычно используют дискретную видеокарту.
Если вам понадобилось выяснить объем устройства, сделать это будет совсем нетрудно. Я покажу вам несколько способов, на которые вы затратите не более пары минут своего времени.
Смотрим свойства системы
Традиционно начинаю обзор с простейшего метода, доступного каждому пользователю. Пример показан на основе Windows 7.
Первым делом заходим на рабочий стол, нажимаем на правую кнопку мыши, после чего появляется меню. В нем выбираем пункт «Разрешение экрана».
Перед вами открылось окно, где вы можете увидеть установленное разрешение экрана. В этом же окне вы можете увидеть пункт «Дополнительные параметры». Нажмите на него.
Кстати, не забывайте о том, что полный объем памяти можно выяснить только в том случае, если для видеокарты установлены драйвера. Если они отсутствуют, система будет показывать объем в 32 Мб.
CPU-Z
Если вдруг указанный выше способ вам не помог или вы просто не смогли им воспользоваться, обратимся за помощью к сторонним программам. Таких достаточно много, включая Everest, AIDA64. CPU-Z и т.д. Что лучше использовать, решать только вам. Я покажу пример на CPU-Z.
Скачиваем программу с официального сайта и устанавливаем. После установки запускаем наше приложение и открываем вкладку Graphics. Видим пункт Memory и подпункт Size — здесь находится объем памяти вашей видеокарты.
Другие способы
Существуют и другие способы узнать объем видеокарты. Например, воспользоваться средством диагностики DirectX. Я хотел было описать этот способ, только система почему-то показываем мне совсем не тот объем видеокарты, каким он является. С чем это связано — загадка.
https://youtube.com/watch?v=k9IPlMVYH0Q
Еще вариант — это посмотреть название видеоадаптера на коробке, а затем вбить наименование в поисковик. Но и тут есть загвоздка: под одним и тем же названием может выпускаться несколько одинаковых видеокарт, но с разным объем памяти.
Таким образом я считаю, что двух описанных выше способов будет предостаточно.
Удалить первичный ключ
В SQL вы можете удалить первичный ключ, используя оператор ALTER TABLE.
Синтаксис
Синтаксис для удаления первичного ключа в SQL.
ALTER TABLE table_name DROP PRIMARY KEY;
- table_name
- Имя таблицы для изменения. Это таблица, первичный ключ которой вы хотите удалить
Пример
Давайте посмотрим, как удалять первичный ключ с помощью оператора ALTER TABLE в SQL.
PgSQL
ALTER TABLE suppliers
DROP PRIMARY KEY;
1 2 |
ALTERTABLEsuppliers DROPPRIMARYKEY; |
В этом примере мы удалили первичный ключ из таблицы suppliers. Нам не нужно указывать имя первичного ключа, поскольку в таблице может быть только один первичный ключ.
Внешний ключ и целостность данных в БД
Все вышеизложенное приводит нас к внешнему ключу (Foreign key) и целостности БД. Foreign key – это поле, ссылающееся на Primary key внешнего отношения. В таблице успеваемости это столбцы «Студент» и «Дисциплина». Их данные отсылают нас к внешним таблицам. То есть поле «Студент» в отношении «Успеваемость» — это Foreign key, а в отношении «Студент» это первичный ключ в базе данных.
Важным принципом построения баз данных является их целостность. И одно из ее правил – целостность по ссылкам. Это значит, что внешний ключ таблицы не может ссылаться на несуществующий Primary key другого отношения. Нельзя удалить из отношения «Студент» запись с кодом 1000 – Иванов Иван, если на нее ссылается запись из таблицы успеваемости. В правильно построенной БД при попытке удаления вы получите ошибку, что это поле используется.
Существуют и другие группы правил целостности, а также другие ограничения баз данных, которые также заслуживают внимания и должны быть учтены разработчиками.
Типы связей и их реализация. Ссылочная целостность и ее обеспечение.
Более
правильным вариантом является вынесение
сведений об издателях в отдельную
таблицу «Издатели». При этом таблица
«Книги» будет содержать ссылки на
записи таблицы «Издатели».
Чтобы
сохранить синхронизацию, следует
обеспечить целостность данных между
таблицами «Книги» и «Издатели».
Связи с обеспечением целостности данных
позволяют следить за тем, чтобы данные
в одной таблице соответствовали данным
в другой. Например, каждая книга в таблице
«Книги» связана с определенным
издателем в таблице «Издатели».
Добавить в таблицу книгу для издателя,
отсутствующего в базе данных, невозможно.
Виды
связей между таблицами
Связь
осуществляется путем сопоставления
данных в ключевых столбцах; обычно это
столбцы, имеющие в обеих таблицах
одинаковые названия. В большинстве
случаев сопоставляются первичный ключ
одной таблицы, содержащий для каждой
из строк уникальный идентификатор, и
внешний ключ другой таблицы. Например,
с каждым из изданий, находящихся в
продаже, можно связать объемы его продаж
путем создания столбца «ИД_издания»
в таблице «Книги» (первичный ключ)
и столбца «ИД_издания» в таблице
«Продажи» (внешний ключ).
Существует
три вида связей между таблицами. Вид
создаваемой связи зависит от того, как
заданы связанные столбцы.
Связи
«один ко многим»
Связь
«один ко многим» — наиболее
распространенный вид связи. При такой
связи каждой строке таблицы А может
соответствовать множество строк таблицы
Б, однако каждой строке таблицы Б может
соответствовать только одна строка
таблицы А. Например, между таблицами
«Издатели» и «Книги» установлена
связь «один ко многим»: каждый из
издателей может опубликовать множество
книг, однако каждая книга публикуется
лишь одним издателем.
Связь
«один ко многим» создается в том
случае, когда только на один из связываемых
столбцов наложено ограничение уникальности
или он является первичным ключом.
В
Microsoft Access сторона связи «один ко
многим», которой соответствует
первичный ключ, обозначается символом
ключа. Сторона связи, которой соответствует
внешний ключ, обозначается символом
бесконечности.
Связи
«многие ко многим»
При
установлении связи «многие ко многим»
каждой строке таблицы А может
соответствовать множество строк таблицы
Б и наоборот. Такая связь создается при
помощи третьей таблицы, называемой
соединительной, первичный ключ которой
состоит из внешних ключей, связанных с
таблицами А и Б. Например, между таблицами
«Авторы» и «Книги» установлена
связь вида «многие ко многим»,
задаваемая с помощью связей вида «один
ко многим» между каждой из этих таблиц
и таблицей «АвторыКниг». Первичный
ключ таблицы «АвторыКниг» — это
сочетание столбцов «ИД_автора»
(первичного ключа таблицы авторов) и
«ИД_книги» (первичного ключа таблицы
заголовков).
Связи
«один к одному»
При
установлении связи «один к одному»
каждой строке таблицы А может
соответствовать только одна строка
таблицы Б и наоборот. Связь «один к
одному» создается в том случае, когда
оба связанные столбца являются первичными
ключами или на них наложены ограничения
уникальности.
Этот
вид связи используется редко, поскольку
в такой ситуации связываемые данные
обычно можно хранить в одной таблице.
Использовать связь вида «один к
одному» можно в указанных ниже случаях.
• Чтобы
разделить таблицу, содержащую слишком
много столбцов.
• Чтобы
изолировать часть таблицы по соображениям
безопасности.
• Для
хранения данных кратковременного
использования, удалить которые проще
всего путем очистки таблицы.
• Для
хранения данных, имеющих отношение
только к подмножеству основной таблицы.
В
Microsoft Access сторона связи «один к одному»,
которой соответствует первичный ключ,
обозначается символом ключа. Сторона
связи, которой соответствует внешний
ключ, также обозначается символом ключа.
Создание
связей между таблицами
При
установлении связи между таблицами
связанные поля не обязательно должны
иметь одинаковые названия. При этом у
них должен быть один и тот же тип данных,
если только поле, являющееся первичным
ключом, не относится к типу «Счетчик».
Поле типа «Счетчик» можно связать
с полем типа «Числовой» только в
том случае, если для свойства FieldSize
(размер поля) каждого из них задано одно
и то же значение. Например, можно связать
столбцы типов «Счетчик» и «Числовой»,
если для свойства FieldSize каждого из них
установлено значение «Длинное целое».
Даже если оба связываемых столбца
относятся к типу «Числовой», значение
свойства FieldSize для обоих полей должно
быть одинаковым.
Простой и составной первичный ключ
Primary key может быть простым и составным. Если уникальность записи определяется значением только в одном поле, как описано выше, мы имеем дело с простым ключом. Составной ключ – это первичный ключ базы данных, состоящий из двух и более полей. Рассмотрим следующее отношение клиентов банка.
Ф. И. О. | Дата рождения | Серия паспорта | Номер паспорта |
Иванов П.А. | 12.05.1996 | 75 | 0553009 |
Сергеев В.Т. | 14.07.1958 | 71 | 4100654 |
Краснов Л.В. | 22.01.2001 | 73 | 1265165 |
Паспорта людей могут содержать одни и те же серии либо номера, но паспортов с одним и тем же сочетанием серии и номера не существует. Таким образом, поля «Серия паспорта» и «Номер паспорта» станут составным ключом указанного отношения, однозначно идентифицируя человека.