Помогите с оптимизацией и определением правильных форматов
От: Jedi-AlekS  
Дата: 08.03.07 14:49
Оценка:
Доброго времени суток всем !!!
Нужна помощь, вышел на новую работу, начальник не шибко разбирается во всех тонкостях, но как бывает очень часто, лезет во все дела со своими «советами», «рекомендациями» и «указаниями».

Дали мне ТЗ, написать БД для отдела (данные на 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 по поводу типов используемых полей, какие будут поддерживаться в следующих версиях, какие предназначены только для совместимости, какие предполагается заменить – скиньте ссылки, чтоб дать ему почитать…
И поделитесь информацией, как лучше реализовать связи между разными БД.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.