Почему делают имена таблиц в SQL Server запускаются с “dbo”?

Булевы переменные должны использоваться только для булевой логики. Во всех остальных случаях используйте перечисления.


Булевы переменные используются для хранения данных, которые могут принимать только два возможных значения. Проблемы, возникающие при их использовании, часто упускаются из виду:

  • Программисты часто не могут правильно определить, когда какой-то фрагмент данных должен иметь только два возможных значения
  • Люди, которые инструктируют программистов, что делать такие как программные менеджеры или те, кто пишет спецификации, которым следуют программисты, часто тоже не могут правильно идентифицировать это
  • Даже если часть данных правильно идентифицирована как имеющая только два возможных состояния, эта гарантия может не сохраниться в будущем ,

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

Пример

Скажем, программист пишет программное обеспечение для автосалона, который продает только легковые и грузовые автомобили. Программист разрабатывает тщательную модель бизнес-требований для своего программного обеспечения. Зная, что единственными проданными типами транспортных средств являются легковые и грузовые автомобили, он правильно определяет, что может использовать логическую переменную внутри класса Vehicle, чтобы указать, является ли транспортное средство легковым или грузовым автомобилем.

class Vehicle {
 bool isTruck;
 ...
}

Программное обеспечение написано так, что когда isTruck является истиной, транспортное средство является грузовиком, а когда isTruck является ложным, транспортное средство является автомобилем. Это простая проверка, выполняемая много раз по всему коду.

Все работает без проблем, пока однажды автосалон не купит другой автосалон, который также продает мотоциклы. Программист должен обновить программное обеспечение, чтобы оно работало правильно, учитывая, что бизнес дилерского центра изменился. Теперь необходимо определить, является ли транспортное средство легковым, грузовым автомобилем или мотоциклом, три возможных состояния.

Как программист должен это реализовать? isTruck является логической переменной, поэтому она может содержать только два состояния. Он может изменить его с логического на другой тип, который допускает много состояний, но это нарушит существующую логику и, возможно, не будет обратно совместимым. Самым простым решением с точки зрения программиста является добавление новой переменной, чтобы представить, является ли транспортное средство мотоциклом.

class Vehicle {
 bool isTruck;
 bool isMotorcycle;
 ...
}

Код изменяется так, что когда isTruck истинно, транспортное средство является грузовиком, когда isMotorcycle истинно, транспортное средство является мотоциклом, и когда они оба ложны, транспортное средство является автомобиль.

Проблемы

Есть две большие проблемы с этим решением:

  • Программист хочет выразить тип транспортного средства, которое является одна идея, но решение использует две переменные для этого. Кому-то, незнакомому с кодом, будет сложнее понять семантику этих переменных, чем если бы программист использовал только одну переменную, которая полностью определяет тип.
  • Решение этой проблемы мотоцикла путем добавления нового логического значения не облегчает программисту работу с такими ситуациями, которые произойдут в будущем. Если дилерский центр начнет продавать автобусы, программист должен будет повторить все эти шаги снова, добавив еще одно логическое значение.

Разработчик не виноват в том, что бизнес-требования его программного обеспечения изменились, что потребовало от него пересмотра существующего кода. Но использование булевых переменных в первую очередь сделало его код менее гибким и трудным для изменения, чтобы удовлетворить неизвестные будущие требования (менее «ориентированные на будущее»). Когда он реализовал изменения самым быстрым способом, код стал труднее читать. Использование логической переменной в конечном итоге было преждевременной оптимизацией.

Решение

Использование перечисления в первую очередь предотвратило бы эти проблемы.

enum EVehicleType { Truck, Car }

class Vehicle {
 EVehicleType type;
 ...
}

Чтобы приспособить мотоциклы в этом случае, все, что должен сделать программист, это добавить Motorcycle в EVehicleType и добавить новую логику для обработки мотоциклетных дел. Нет необходимости добавлять новые переменные. Существующая логика не должна нарушаться. И тот, кто не знаком с кодом, может легко понять, как хранится тип транспортного средства.

Заметки Клиффа

Не используйте тип, который может хранить только два разных состояния, если вы не уверены, что двух состояний всегда будет достаточно. Используйте перечисление, если есть какие-либо возможные условия, при которых в будущем потребуется более двух состояний, , даже если логическое значение будет соответствовать существующим требованиям . [Тысяча сто тридцать два]

276
задан AakashM 14 September 2016 в 04:04
поделиться

2 ответа

dbo - это схема по умолчанию в SQL Server. Вы можете создавать свои собственные схемы, чтобы лучше управлять пространством имен объектов.

217
ответ дан 23 November 2019 в 02:08
поделиться

Если вы используете Sql Server Management Studio, вы можете создать свою собственную схему, перейдя в Базы данных - Ваша база данных - Безопасность - Схемы.

Создать схему с использованием сценария так же просто, как (например):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

Вы можете использовать их для логической группировки таблиц, например, создав схему для «финансовой» информации, а другую - для «личных» данных. Ваши таблицы будут отображаться как:

Financial.BankAccounts Финансовые операции Personal.Address

Вместо использования схемы dbo по умолчанию.

81
ответ дан 23 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

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