Доброго времени суток всем !!!
Нужна помощь, вышел на новую работу, начальник не шибко разбирается во всех тонкостях, но как бывает очень часто, лезет во все дела со своими «советами», «рекомендациями» и «указаниями».
Дали мне ТЗ, написать БД для отдела (данные на SQL 2000, приложение Access 2003).
В принципе простое задание, не нашел в нем ни чего сложного и изощренного.
Заставил рисовать схему «будущей БД» в Erwin, которая выпущена был в 1998 году, убедить его что это «устаревший» софт – не получилось. Я нарисовал схему, но потом открыл Query Analyzer и написал скрипт руками…
Создал базу на сервере, начальник полез проверять и выслал мне «претензии» к структуре.
Сначала сказал, что необходимо заменить во всех таблицах nvarchar(100), nvarchar(150), nvarchar(250) на соответственно nvarchar(128), nvarchar(160) и nvarchar(256).
Потом добавил, что вообще надо избавиться от nvarchar и сделать поля varchar – «нам этого хватит». После этого сказал заменить во всех таблицах datetime на smalldatetime – как было сказано “для экономии места”.
Дальше больше. Сказал, чтоб убрал у всех полей значение по умолчанию Null, мол «это не правильно».
Сказал, чтоб я для полей с именем пользователя поставил значение по умолчанию suser_sname(), ладно, с этим я еще могу согласиться, но ставить для текстовых полей Not Null и Default ‘’ – это же не правильно, а для полей int сказал ставить Default 1…
Дальше хуже, сказал, что делать связи «стандартным» способом не будем, что реализуем это посредством триггеров, мол «мы всегда так делаем и это очень удобный способ». Я посмотрел, в существующих у них БД, половина таблиц не имеют «нормальных» связей, а «связаны» посредством триггеров…
Сказал удалить «правильную» таблицу организаций (формально перечень «наших» юр. лиц), и сказал, что будем использовать существующие в другой БД. Там данные разбиты на несколько таблиц, половина полей по-русски, и для отображения 4-х!!! полей, которые нужны будут пользователю только для «чтения», придется линковать 6 таблиц.
Вот пример:
CREATE TABLE dbo.tblBank
(
BankID int IDENTITY (1, 1) Not Null,
BankTypeID int DEFAULT Null Not Null,
BankName1 nvarchar(100) DEFAULT Null Not Null,
BankName2 nvarchar(250) DEFAULT Null Not Null,
BankCode nvarchar(9) DEFAULT Null Not Null,
BankAccount nvarchar(20) DEFAULT Null Null,
IsNotUse bit DEFAULT 0 Not Null,
CreateDate datetime DEFAULT getdate() Not Null,
CreateUser nvarchar(128) DEFAULT Null Not Null,
ChangeDate datetime DEFAULT getdate() Not Null,
ChangeUser nvarchar(128) DEFAULT Null Not Null,
Notes ntext
)
ALTER TABLE dbo.tblBank ADD
CONSTRAINT pkBankID PRIMARY KEY CLUSTERED (BankID)
Это, если не сразу понятно, справочник банков, так вот, мне было предложено убрать BankID и сделать ключевым поле BankCode – БИК, т.к. он уникальный и не повторяется. Мне кажется – делать ключевым текстовое поле не корректно.
Заменить у полей «названий» nvarchar(100) на varchar(128), а nvarchar(250) на varchar(256).
Для поля BankTypeID поставить значение по умолчанию 1 вместо Null, а для текстовых поставить ‘’.
В общем, у меня нет слов.
Помогите корректно, внятно и главное обоснованно объяснить начальнику, что это не правильно. На сколько я знаю в MS SQL 2005 вообще не рекомендуется использовать varchar и char.
Если кто знает, где лежат рекомендации MS по поводу типов используемых полей, какие будут поддерживаться в следующих версиях, какие предназначены только для совместимости, какие предполагается заменить – скиньте ссылки, чтоб дать ему почитать…
И поделитесь информацией, как лучше реализовать связи между разными БД.