![]() | You are viewing Log in Create a LiveJournal Account Learn more |
Решил попробовать скачать эту программу и честно скажу, мена она просто порадовала. Просто всем настоятельно рекомендую ее себе поставить. Писать блоги просто офигенно удобно. Одна из приятных возможностей, что меня порадовало, это то, что данная софтина поддерживает самые популярные блогеры, к ним же и относиться LiveJournal. Live Writer сам причем определяет какой у тебя сервис по твоему url. Загружает все стили с сервера, тем самым позволяет пользователю писать блоги и одновременно просматривать в том стиле, в котором оформлен блог. В общем классная тулза, нечего сказать.
Основное неудобство, что заставляло меня не ставить данную программу, это долбанный microsoft live intaller, который сам по себе весит 2 метра, так еще и устанавливает прогу скачивая ее с инет. Это офигенно неудобно, когда хочешь ее поставить на другом компьютере, придется качать заново. Однако мне все же повезло, я нашел на одном из форумов, где можно скачать ее отдельным инсталлятором, поэтому делюсь ссылкой :-) Windows Live Writer
При разработке базы данных часто возникает такая ситуация как виртуальное удаление данных. Виртуальное удаление – это когда данные физически не удаляются из таблицы, а всего лишь помечаются как удаленные.
Причиной, по которой прибегают к этому, это иметь возможность всегда восстановить нужные данные.
Есть два варианта действия:
1. Постоянное создание резервных копий базы данных;
2. Создание соответствующего поля в таблице
В первом случае это чревато следующими последствиями:
- По мере использования системы количество резервных копий базы данных становится достаточно большое количество. При необходимости найти удаленные данные будет достаточно трудно.
- Большой расход дискового пространства для хранения резервных копий.
Во втором варианте будем использовать соответствующие поле в базе данных сигнализирующие о том, что запись удалена. Назовем его IsDeleted. Вполне логично было бы использовать тип BIT где (1) указывало бы, что запись удалена, а (0) соответственно нет. Однако тут все хорошо, до тех пор, пока не потребуются в таблице уникальные поля.
Приведу пример:
У нас есть таблица TextMessage, в котором есть такое поле как Title, этот поле должно быть уникальное. Есть еще поле IsDeleted типа BIT, которое указывает, что запись удалена.
IFOBJECT_ID('TextMessage','U')ISNOTNULL
DROPTABLE TextMessage
GO
CREATETABLE TextMessage
(
TextMessageId INT,
Title NVARCHAR(50),
.......
IsDeleted BIT
)
GO
Тем самым у нас получилось что указать дважды одинаковое имя в поле title запрещено, но после того как запись пометили как удаленное может возникнуть снова потребность создать запись с тем же именем title что уже реально существует в базе. Итак, мы пришли к выводу, что нужно связать два поля. СделатьэтоможновоспользовавшисьCONSTRAINT.
Пример:
CONSTRAINT UK_TITLE_ISDELETED UNIQUE
(
Title,
IsDeleted
)
Использование в качестве типа BIT для поля IsDeleted тоже не является лучшим вариантом, т.к. никакого эффекта от этого нет, BITможет содержать только 0 и 1, следовательно, будут только две записи с одинаковыми записями Title, причем только одно может быть помечено как удаленное.
Решением данной проблемы является использование в качестве типа IsDeletedне BIT, а DateTime, при этом поле должно иметь возможность содержать значение NULL. Запись будет сигнализировать, что оно действующее, это тогда когда содержит NULL, а если требуется пометить как удаленное, то ставим текущую дату. При этом это нам дает дополнительную информацию о дате удаления.
Ниже приведу пример кода
IFOBJECT_ID('TextMessage','U')ISNOTNULL
DROPTABLE TextMessage
GO
CREATETABLE TextMessage
(
TextMessageId INTPRIMARYKEY,
Title NVARCHAR(50)NOTNULL,
EMail NVARCHAR(50)NOTNULL,
IsDeleted DATETIMENULL
)
GO
ALTERTABLE TextMessage ADD
CONSTRAINT UK_TITLE_ISDELETED UNIQUE
(
Title,
IsDeleted
)
ALTERTABLE TextMessage ADD
CONSTRAINT UK_EMAIL_ISDELETD UNIQUE
(
EMail,
IsDeleted
)
Chat about what's on your mind. More about public chats.
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |