Выбор читателей
Популярные статьи
Каждая запись в таблице, входящей в РСУБД, должна иметь первичный ключ (ПК) — набор атрибутов, уникально идентифицирующий её в таблице. Случай, когда таблица не имеет первичного ключа, имеет право на существование, однако в данной статье не рассматривается.
В качестве первичного ключа может использоваться —
Естественный Ключ (ЕК) — набор атрибутов описываемой записью сущности, уникально её идентифицирующий (например, номер паспорта для человека);
или
Суррогатный Ключ (СК) — автоматически сгенерированное поле, никак не связанное с информационным содержанием записи. Обычно в роли СК выступает автоинкрементное поле типа INTEGER.
Есть два мнения:
Естественно, можно представить себе и некое промежуточное мнение, но сейчас дискуссия ведётся в рамках двух вышеизложенных.
Для понимания места и значения СК рассмотрим этап проектирования, на котором они вводятся в структуру БД, и методику их введения.
Для ясности рассмотрим БД из 2-х отношений — Города (City) и Люди (People) Предполагаем, что город характеризуется Hазванием (Name), все города имеют разные названия, человек характеризуется Фамилией (Family), номером паспорта (Passport) и городом проживания (City). Также полагаем, что каждый человек имеет уникальный номер паспорта. Hа этапе составления инфологической модели БД её структура одинакова и для ЕК и для СК.
CREATE TABLE City(Name VARCHAR(30) NOT NULL PRIMARY KEY); CREATE TABLE People(Passport CHAR(9) NOT NULL PRIMARY KEY, Family VARCHAR(20) NOT NULL, City VARCHAR(30) NOT NULL REFERENCES City(Name));
Для ЕК все готово. Для СК делаем еще один этап и преобразуем таблицы следующим образом:
CREATE TABLE City(/* В разных диалектах языка SQL автоинкрементное поле будет выражено по-разному - например, через IDENTITY, SEQUENCE или GENERATOR. Здесь мы используем условное обозначение AUTOINCREMENT. */ Id INT NOT NULL AUTOINCREMENT PRIMARY KEY Name VARCHAR(30) NOT NULL UNIQUE); CREATE TABLE People(Id INT NOT NULL AUTOINCREMENT PRIMARY KEY, Passport CHAR(9) NOT NULL UNIQUE, Family VARCHAR(20) NOT NULL, CityId INT NOT NULL REFERENCES City(Id));
Обращаю внимание, что:
В общем случае алгоритм добавления СК выглядит следующим образом:
Это механическая операция, которая никак не нарушает инфологической модели и целостности данных. С точки зрения инфологической модели эти две базы данных эквивалентны.
Возникает резонный вопрос — а зачем? Действительно, вводить в таблицы какие-то поля, что-то заменять, зачем? Итак, что мы получаем, проделав эту «механическую» операцию.
Это область, где СК демонстрируют наибольшие преимущества. Поскольку операции связи между таблицами отделены от логики «внутри таблиц» — и то и другое можно менять независимо и не затрагивая остального.
Hапример — выяснилось, что города имеют дублирующиеся названия. Решено ввести в City еще одно поле — Регион (Region) и сделать ПК (City, Region). В случае ЕК — изменяется таблица City, изменяется таблица People — добавляется поле Region (да, да, для всех записей, про размеры молчу), переписываются все запросы, в том числе на клиентах, в которых участвует City, в них добавляются строка AND XXX.Region = City.Region.
Да, чуть не забыл, большинство серверов сильно не любят ALTER TABLE на поля, входящие в PRIMARY KEY и FOREIGN KEY.
В случае СК — добавляется поле в City, изменяется UNIQUE CONSTRAINT. Всё.
Еще пример — в случае СК изменение списка полей в SELECT никогда не заставляет переписывать JOIN. В случае ЕК — добавилось поле, не входящее в ПК связанной таблицы — переписывайте.
Еще пример — поменялся тип данных поля, входящего в ЕК. И опять переделки кучи таблиц, заново оптимизация индексов…
В условиях меняющегося законодательства это достоинство СК само по себе достаточно для их использования.
Предположим в нашем примере, что средняя длина названия города — 10 байт. Тогда на каждого человека в среднем будет приходиться 10 байт для хранения ссылки на город (реально несколько больше за счёт служебной информации на VARCHAR и гораздо больше за счёт индекса по People.City, который придётся построить, чтобы REFERENCES работала эффективно). В случае СК — 4 байта. Экономия — минимум 6 байт на человека, приблизительно 10 Мб для г. Hовосибирска. Очевидно, что в большинстве случаев уменьшение размера БД — не самоцель, но это, очевидно, приведет и к росту быстродействия.
Звучали аргументы, что БД может сама оптимизировать хранение ЕК, подставив вместо него в People некую хэш-функцию (фактически создав СК сама). Hо ни один из реально существующих коммерческих серверов БД так не делает, и есть основания полагать, что и не будет делать. Простейшим обоснованием такого мнения является то, что при подобной подстановке банальные операторы ADD CONSTRAINT … FOREIGN KEY или DROP CONSTRAINT … FOREIGN KEY будут приводить к нешуточной перетряске таблиц, с ощутимым изменением всей БД (надо будет физически добавить или удалить (с заменой на хэш-функцию)) все поля, входящие в CONSTRAINT.
Вопрос достаточно спорный, однако, исходя из предположений, что:
быстродействие системы на СК будет ощутимо выше. И вот почему:
ЕК могут потенциально дать более высокое быстродействие, когда:
Т.е., в нашем примере это запрос типа:
SELECT Family, City FROM People;
В случае СК этот запрос будет выглядеть как
SELECT P.Family, C.Name FROM People P INNER JOIN City C ON P.CityId = C.Id;
Казалось бы, ЕК дает более простой запрос с меньшим количеством таблиц, который выполнится быстрее. Hо и тут не всё так просто: размеры таблиц для ЕК — больше (см. выше) и дисковая активность легко съест преимущество, полученное за счёт отсутствия JOIN`а. Ещё сильнее это скажется, если при выборке данных используется их фильтрование (а при сколько-либо существенном объеме таблиц оно используется обязательно). Дело в том, что поиск, как правило, осуществляется по информативным полям типа CHAR, DATETIME и т.п. Поэтому часто бывает быстрее найти в справочной таблице набор значений, ограничивающий возвращаемый запросом результат, а затем путем JOIN`а по быстрому INTEGER-индексу отобрать подходящие записи из большой таблицы. Например:
будет выполняться в разы медленнее, чем
В случае ЕК — будет INDEX SCAN большой таблицы People по CHARACTER-индексу. В случае СК — INDEX SCAN меньшей CITY и JOIN по эффективному INTEGER индексу.
А вот если заменить = ‘Иваново’ на LIKE ‘%ваново’, то речь пойдет о торможении ЕК относительно СК на порядок и более.
Аналогично, как только в случае с ЕК понадобится включить в запрос поле из City, не входящее в её первичный ключ — JOIN будет осуществлятся по медленному индексу и быстродействие упадет ощутимо ниже уровня СК. Выводы каждый может делать сам, но пусть он вспомнит, какой процент от общего числа его запросов составляют SELECT * FROM ЕдинственнаяТаблица. У меня — ничтожно малый.
Да, сторонники ЕК любят проводить в качестве достоинства «информативность таблиц», которая в случае ЕК растет. Ещё раз повторю, что максимальной информативностью обладает таблица, содержащая всю БД в виде flat-file. Любое «повышение информативности таблиц» есть увеличение степени дублирования в них информации, что не есть хорошо.
Hа первый взгляд ЕК быстрее — не надо при INSERT генерировать лишнего поля и проверять его уникальность. В общем-то так оно и есть, хотя это замедление проявляется только при очень высокой интенсивности транзакций. Впрочем и это неочевидно, т.к. некоторые серверы оптимизируют вставку записей, если по ключевому полю построен монотонно возрастающий CLUSTERED индекс. В случае СК это элементарно, в случае ЕК — увы, обычно недостижимо. Кроме этого, INSERT в таблицу на стороне MANY (который происходит чаще) пойдет быстрее, т.к. REFERENCES будут проверяться по более быстрому индексу.
При обновлении поля, входящего в ЕК, придётся каскадно обновить и все связанные таблицы. Так, переименование Ленинграда в Санкт-Петербург потребует с нашем примере транзакции на несколько миллионов записей. Обновление любого атрибута в системе с СК приведет к обновлению только одной записи. Очевидно, что в случае распределенной системы, наличия архивов и т.п. ситуация только усугубится. Если обновляются поля не входящие в ЕК – быстродействие будет почти одинаковым.
Еще о CASCADE UPDATE
Далеко не все серверы БД поддерживают их на декларативном уровне. Аргументы «это у вас сервер кривой» в этом случае вряд ли корректны. Это вынуждает писать отдельную логику для обновления, что не всегда просто (приводился хороший пример — при отсутствии CASCADE UPDATE обновить поле, на которое есть ссылки, вообще невозможно — надо отключать REFERENCES или создавать копию записи, что не всегда допустимо (другие поля могут быть UNIQUE)).
В случае СК будет выполняться быстрее, по той простой причине, что проверка REFERENCES пойдет по быстрому индексу.
Hичто не вечно под Луной. Самый, казалось бы, надежный атрибут вдруг отменяется и перестаёт быть уникальным (далеко ходить не буду — рубль обычный и рубль деноминированный, примерам несть числа). Американцы ругаются на неуникальность номера социального страхования, Microsoft — на китайские серые сетевые платы с дублирующимися MAC-адресами, которые могут привести к дублированию GUID, врачи делают операции по смене пола, а биологи клонируют животных. В этих условиях (и учитывая закон неубывания энтропии) закладывать в систему тезис о неизменности ЕК — закладывать под себя мину. Их надо выделять в отдельный логический слой и по возможности изолировать от остальной информации. Так их изменение переживается куда легче. Да и вообще: однозначно ассоциировать сущность с каким-то из атрибутов этой сущности — ну, странно, что-ли. Hомер паспорта ещё не есть человек. СК же — это некая субстанция, именно и означающая сущность. Именно сущность, а не какой-то из её атрибутов.
В системе с СК не осуществляется контроль правильности ввода информации
Это не так. Контроль не осуществлялся бы, если бы на поля, входящие в ЕК не было наложено ограничение уникальности. Очевидно, что если предметная область диктует какие-то ограничения на атрибуты ЕК, то они будут отражены в БД в любом случае.
В системе с ЕК меньше JOIN`ов, следовательно, запросы проще и разработка удобнее
Да, меньше. Hо, в системе с СК тривиально пишется:
CREATE VIEW PeopleEK AS SELECT P.Family, P.Passport, C.Name FROM People P INNER JOIN City C ON P.CityId = C.Id
И можно иметь все те же прелести. С более, правда, высоким быстродействием. При этом неплохо упомянуть, что в случае ЕК многим придется программировать каскадные операции, и, не дай Бог в распределённой среде, бороться с проблемами быстродействия. Hа фоне этого «короткие» запросы уже не кажутся столь привлекательными.
Введение СК нарушает третью нормальную форму
Вспомним определение: Таблица находится в третьей нормальной форме (3НФ), если она удовлетворяет определению 2НФ, и ни одно из её неключевых полей не зависит функционально от любого другого неключевого поля.
То есть, речи о ключевых полях там не идёт вообще. Поэтому добавление ещё одного ключа в таблицу ни в коей мере не может нарушить 3НФ. Вообще, для таблицы с несколькими возможными ключами имеет смысл говорить не о 3 НФ, а о Нормальной Форме Бойса-Кодда, которая специально введена для таких таблиц.
В Steam существуют две возможности получить игру бесплатно от другого игрока или компании. Это подарок (gift) и cd-key. В этой статье рассмотрим чем они отличаются и как получить Steam CD-Key бесплатно.
Для начала давайте разберемся в чем отличие Steam CD-Key от подарка (гифта, gift). Оба позволяют получить вам полноценную игру, однако в случае с подарком есть одно существенное отличие. Получая CD-Key вы можете активировать игру только на себя. Сразу после ввода ключа она добавится в вашу библиотеку. Вы конечно можете подарить ключ другу, например отправив по электронной почте, но только если вы его не активировали в своем аккаунте.
В случае с подарком вы получаете ссылку, перейдя по которой вводите логин и пароль и у вас есть возможность активировать игру или положить в инвентарь. Во втором случае из инвентаря вы можете ее активировать позже или передать другу через стим. Передать игру, которую вы уже активировали нельзя.
Когда вы получили ключ игры Steam то запускайте клиент и идите в библиотеку игр. Далее нажмите внизу кнопку добавить игру, затем выберите пункт «Активировать в Steam».
Затем, в открывшемся окне, нажмите кнопку далее, примите соглашение и наконец введите ключ игры. Вводить необходимо точно так как вы его получили — символ в символ!
После ввода еще раз проверьте правильность ключа и жмите кнопку «Далее». Поздравляем! Игра активирована!
Еще недавно я рассказывал вам о способе , но в этой статье поговорим о другом. Способов получения бесплатного ключа огромное множество! Ключ можно получить участвуя в конкурсах различных игровых сайтов, или групп вконтакте или facebook. Но я расскажу об одном сайте, где это дело поставлено по сути на поток. Сайт называется GAMEKIT . Создатели сайта являются партнерами многих игр и организовали некое сообщество. После регистрации на сайте вам необходимо выполнять простые задания, за которые будете получать поинты.
За поинты в дальнейшем можно получить много различных наград например:
Ключ – сочетание из цифр и букв для активации программы или игры.
Понятие ключ сейчас очень актуально в среде интернета, так как большинство программ и игр активируются посредством ввода определенного ключа.
Для каждой программы и игры существует свой уникальный код и, как правило, он рассчитан только на один компьютер. Есть конечно и исключения ( / / и т.д) в данных программах один ключ может действовать на несколько (тысяч) компьютеров, планшетов, ноутбуков. Конечно это не весь спектр программ, для которых это работает. Но как правило один код работает для нескольких программ. Если же брать игры, в том же , то один лицензионный код равен одной активированной игре и никак иначе.
Есть 3 способа получения ключей:
1 – Купить. Это можно сделать у создателей программы или игры, или же у посредников. Например вы можете приобрести некоторые ключи в нашем интернет магазине, а точнее в разделе магазин
2 – Получить Триал (временный) ключ на ограниченный срок (как правило до 3х месяцев). Подобные возможности дают как правило антивирусные программы при первой установке или же подобные ключи можно найти в тематических группах по определенным видам. Например у нас есть группа для ключей касперского
Святилище (Sanctuary) в чрезвычайно полезно в плане нахождения редких пушек, здесь будет рассказано где и как их получить.
Добрый человек
Начнем с такого персонажа, как Майкл Мамарил . Его история заслуживает отдельного упоминания: персонаж Майкла основан на реальном человеке, ярым фанатом оригинальной , но недавно умершим от рака. Так Gearbox решили отдать ему честь, ведь он не дождался сиквела.
Но вытрите слезы, сосредоточимся на игровых пушках.
Если поговорить с этим персонажем , то вы получите достижение "Tribute To A Vault Hunter" (Дань охотника на хранилище, или как-то так), а также редкую цветную штуковину с разным шансом получения:
Майкл даст вам пушку при каждом разговоре с ним, но вот появляется он каждый раз в разных местах.
В первый раз он, вероятнее всего, будет стоять возле доктора Зеда. У него на лице очки и пушка за спиной.
Вот карта мест всех его появлений:
Также находится в Святилище. Разработчики сделали отдельное заявление по поводу них: в нем содержится крайне ценный лут, но вот досада, ключ для игроков дают лишь 1. Также разработчики заставляли купить Season Pass, чтобы дали еще один. Таким образом, нас вынуждают тщательно спланировать открытие сундука и терпеть до последнего, ведь гораздо логичнее открыть его на высоких уровнях, дабы содержимое было крайне ценным.
Как и большинство лицензионного софта, операционная система Windows 10 является платным продуктом. Но у неё есть также «условно-бесплатная» версия. Каждый пользователь сам решает, оставить ли на компьютере пробную версию или всё-таки пройти процесс активации ОС. Те, кто остановил свой выбор на лицензионной версии, могут получить заветный ключ активации несколькими способами.
«Условно-бесплатная» (неактивированная) версия Windows 10 почти не ограничивает функциональные возможности ОС. Внешне она отличается от активированной версии только тем, что в нижней части рабочего стола, над панелью задач, всё время висит «водяной знак» - напоминание об активации Windows. Кроме того, пользователь неактивированной версии лишён возможности персонализировать систему, то есть менять обои рабочего стола, иконки, экраны загрузки, цветовые темы и так далее. Ничего критичного для работы в этом нет, но всё же эти незначительные, на первый взгляд, ограничения рано или поздно могут начать раздражать. В таком случае имеет смысл активировать Windows одним из описанных ниже способов.
«Водяной знак» можно убрать с помощью сторонних утилит, однако ограничения настроек персоналиции системы всё равно останутсяИтак, вы решили активировать свою версию Windows 10. Если у вас есть ключ активации, то ничего сложного в этом нет. Но что, если ключа нет? В таком случае тоже существуют способы легальной активации ОС. Корпорация Microsoft предлагает на выбор два проверенных и безопасных метода:
В русском переводе способ активации Digital Entitlement получил название «Цифровое разрешение». Изначально он был предназначен лишь для пользователей, участвующих в программе Windows Insider , созданной корпорацией Microsoft для предварительного тестирования и оценки Windows. Затем «цифровое разрешение» стало доступно всем желающим в период действия акции бесплатного обновления с версий 7 и 8.1 до Windows 10.
Получить «цифровую лицензию» на ПК можно, привязав к установленной ОС учётную запись Microsoft через настройку «Активация» в параметрах «Обновление и безопасность», после чего у вас навсегда отпадёт необходимость активировать Windows 10. Но всё же потребуется хоть один раз ввести на своём ПК лицензионный ключ Windows.
Чтобы попасть в число пользователей Windows Insider и получить заветное «цифровое разрешение», необходимо:
Автор данной статьи хотел бы предостеречь пользователей, собравшихся прибегнуть к такому методу получения «цифрового разрешения». Во-первых, загруженная версия Windows 10 будет тестовой и не сможет гарантировать стабильную работу всех компонентов. Во-вторых, вам очень часто придётся обновлять ОС, так как число выходящих тестовых компонентов Windows достаточно велико. И в-третьих, этот тип активации системы на самом деле предоставляет пользователю не официальную лицензионную версию Windows, а её пробный вариант, который действует 90 дней с последующим автоматическим продлением на аналогичный срок. Иногда о факте использования пробной версии может предупреждать появляющийся на рабочем столе «водяной знак».
Это ещё один официальный способ активации Windows 10, предлагаемый Microsoft. Нужно сделать следующее:
Этот способ активации Windows 10 - один из самых безопасных, так как весь процесс проходит конфиденциально, без участия каких-либо третьих сторон (активацию проводит робот-автоответчик). К тому же вы не передаёте никаких личных данных или информацию, угрожающую безопасности вашего ПК и операционной системы. Стоит помнить лишь одно правило: звонить только по номерам, указанным в «мастере активации Windows по телефону» .
Иногда способ активации по телефону может не сработать. Чаще всего возникают следующие проблемы:
Как известно, неактивированная версия Windows 10 доступна для использования только в течение 30 календарных дней . После окончания этого срока система попросту перестанет загружаться, выдавая лишь окно с сообщением о необходимости активировать ОС. Однако на самом деле Windows 10 может работать без активации целых 90 дней. Для этого нужно воспользоваться предоставленной корпорацией Microsoft функцией отсрочки активации.
Требуется сделать следующее:
Если у вас была установлена лицензионная версия Windows 10 и вы решили заменить на своём компьютере комплектующие, то это может привести к сбросу ключа активации ОС. При этом повторно использовать действующую лицензию будет невозможно. Чаще всего такая проблема возникает при замене материнской платы . Чтобы вновь активировать ОС, проделайте следующее:
Существует несколько способов приобретения лицензионного ключа для активации Windows 10. Рассмотрим наиболее популярные из них.
Это наиболее быстрый и безопасный способ . После завершения покупки вы получите цифровой ключ для активации вашей версии Windows 10. Для приобретения:
Существуют и другие, довольно удобные, но различающиеся по цене и степени надёжности способы приобретения ключа активации Windows 10.
Надёжный, но менее дешёвый способ приобретения лицензионной версии ОС. При его использовании выгода может составить порядка 1–2 тысяч рублей. Приобрести коробочную версию на официальном сайте Microsoft нельзя, покупать её нужно в магазинах цифровой техники.
В комплект входят:
Самый дорогой способ приобретения ОС. В этом случае Windows 10 будет, фактически, лишь дополнением к комплектующим. Чаще всего к такому способу прибегают пользователи, решившие полностью обновить аппаратную часть ПК. В этом случае заранее собранный в магазине системный блок с установленной Windows 10 обойдётся дешевле, чем при покупке комплектов и ОС по отдельности.
Наименее затратный способ приобретения лицензии Windows, но самый ненадёжный . Купить цифровой ключ Windows 10 можно на любой известной торговой площадке, например, на eBay.com . Риски при такой покупке бывают разные. Вам могут продать нерабочий ключ или его «OEM-версию» (ключ, который уже привязан к конкретному оборудованию). Продавец может совершить подмену версии ОС (к примеру, вместо 64-разрядной продать 32-разрядную). Д аже если на площадке (как, допустим, на eBay) имеется функция возврата средств в течение 30 дней, это всё равно не гарантирует безопасность совершаемой сделки .
Автору данной статьи не раз приходилось слышать негативные отзывы от пользователей, осуществлявших покупку лицензионных цифровых ключей Windows на сторонних торговых площадках. Иногда ключи оказывались попросту нерабочими. Иногда, по истечении определённого срока, такие ключи «отзывались» (становились непригодными) из-за того, что купленная цифровая лицензия являлась «OEM-версией». Поэтому автор советует: если вы решились купить ключ, например, на eBay, то внимательно читайте описание, уточняйте у продавца информацию о типе и версии ключа, а также проверяйте наличие функции возврата денег.
Легальных способов активации Windows 10 существует достаточно много, чтобы не прибегать к незаконным методам. Любой пользователь может зарегистрироваться в программе Windows Insider от корпорации Microsoft, получив соответствующую цифровую лицензию, или активировать ОС по телефону. К тому же всегда есть возможность купить как цифровую, так и физическую (коробочную) версию Windows 10 или приобрести её в комплекте с уже собранным системным блоком. А если необходимо максимально сэкономить, то можно купить ключ на сторонних торговых площадках, правда, только на свой страх и риск.
Статьи по теме: | |
Фирменный стиль в одежде почты россии Мужская и женская форма Почты России
Почта России – крупное предприятие, которое ставит перед собой цель... Гуд бай, мошенники: безопасный шопинг на Алиэкспрессе с Aliexpress Helper Алиэкспресс помощник
AliPrice (Али Прайс) — новый и очень интересный сервис для удобной... Программе Skype: как перевернуть изображение
Веб-камеры компьютеров или даже ноутбуков порой преподносят своим... |