Почему всегда длины полей SQL (2^n)-1 если меньше чем 127?

Это не возможно, почему?

В C#, это вызывается на Вас, что при наследовании открытых методов необходимо обнародовать их. Иначе они ожидают, что Вы не произойдете из класса во-первых.

Вместо того, чтобы использовать - отношения, необходимо было бы использовать - отношения.

разработчики языка не позволяют это нарочно так, чтобы Вы использовали наследование более правильно.

, Например, можно было бы случайно перепутать класс Автомобиль для получения из класса Механизм для получения, это - функциональность. Но Механизм является функциональностью, которая используется автомобилем. Таким образом, Вы хотели бы использовать - отношения. Пользователь Автомобиля не хочет иметь доступ к интерфейсу Механизма. И сам Автомобиль не должен путать методы Механизма со своим собственным. Ни будущие деривации Автомобиля.

, Таким образом, они не позволяют ему защищать Вас от плохих иерархий наследования.

, Что необходимо сделать вместо этого?

Вместо этого необходимо реализовать интерфейсы. Это оставляет Вас свободными иметь функциональность с помощью - отношения.

Другие языки:

В C++ Вы просто определяете модификатор перед базовым классом частных, общедоступных или защищенных. Это делает всех членов основы, которые были общедоступны к тому указанному уровню доступа. Кажется глупым мне, что Вы не можете сделать того же в C#.

реструктурированный код:

interface I
{
    void C();
}

class BaseClass
{
    public void A() { MessageBox.Show("A"); }
    public void B() { MessageBox.Show("B"); }
}

class Derived : I
{
    public void C()
    {
        b.A();
        b.B();
    }

    private BaseClass b;
}

я понимаю, что названия вышеупомянутых классов немного спорны:)

Другие предложения:

Другие предложили сделать () и B () общественность и выдать исключения. Но это не делает дружественный класс для людей для использования, и он действительно не имеет смысла.

7
задан Jon Winstanley 15 October 2009 в 09:44
поделиться

6 ответов

Я помню старые времена, когда использование 2 ^ n Length было лучше для выравнивания блоков на диске или в памяти. Выровненный блок оказался быстрее. Сегодня размеры "блоков" больше, а память и диск достаточно быстры, чтобы игнорировать выравнивание, кроме очень больших блоков, которые ист. (Что бы ни означало сегодня «очень большой» ...)

В наши дни это просто традиционно.

И еще одна причина, по которой я могу сказать: Есть только 10 типов людей: те, кто умеет бинарные, и другие.

И 2 ^ n -1 - кандидаты на простые числа Мерсена. так что это тоже чокнутый ...

7
ответ дан 6 December 2019 в 10:01
поделиться

Я не могу сказать, так как видел, что тренд «-1» по-разному используется для меньших / больших полей. Однако я думаю, что это не что иное, как Developer / dba OCD. Всегда хотят «круглые» числа, когда им действительно следует принимать решения о длине поля на основе бизнес-правил, а не «красивости»

3
ответ дан 6 December 2019 в 10:01
поделиться

На самом деле, я впервые слышу о такой «тенденции». Мои поля varchar всегда настолько длинные, насколько мне нужно.

Я бы сказал, что для этого нет особой причины. Просто предпочтение разработчика.

0
ответ дан 6 December 2019 в 10:01
поделиться

Не только уменьшилась отдача, но и если вы установили строковые типы с произвольными ограничениями, у вас гораздо больше шансов вызвать проблему, чем решить ее.

Если это действительно бизнес-ограничение, затем используйте тип TEXT (или аналогичный) и ограничение CHECK на длину и выберите число в соответствии с бизнес-ограничением, которое вы пытаетесь наложить.

СУБД, вероятно, будет реализовывать хранилище для типа TEXT идентично varchar ( х) в любом случае. Если это не так, и вам действительно интересно, вам следует изучить стратегии внутреннего хранилища вашей конкретной системы и подумать, есть ли какие-либо преимущества от varchar или нет.

2
ответ дан 6 December 2019 в 10:01
поделиться

Я не могу представьте на мгновение, почему они определяют размеры полей таким образом, либо по счету 2 ^ N, либо по 2 ^ N-1. С точки зрения SQL Server это больше похоже на неправильное представление о том, как SQL хранит эти данные на уровне страницы, чем на конкретную причину.

Я бы уделил больше внимания типам, возможному хранению вне страницы (SLoB / LoB) и строкам / страницам + удовлетворение бизнес-потребностей с помощью определения размера, чем формуле, основанной на использовании 2 ^ N и т.

0
ответ дан 6 December 2019 в 10:01
поделиться

Я думаю, это просто программисты выбирают число из воздуха, когда это не имеет особого значения.

Если бы вам пришлось установить предел в поле «примечания», например, непрограммист, вероятно, выберет 100 или 200 символов как круглое число, тогда как программист может подумать о 127 или 255 как круглое число.

7
ответ дан 6 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: