Я должен установить поле Varchar(255) как первичный ключ таблицы базы данных в Firebird 2.1.
Я получаю сообщения об ошибках, говоря, что размер поля является слишком большим. Я использую UTF8 в качестве своего набора символов и размера страницы по умолчанию 4 096.
Действительно ли возможно сделать это в Firebird? Я должен удостовериться, что этот столбец уникален.
Я использовал для разделения соглашений об именах классов для каждого типа программного уровня, о котором вы спрашиваете. Однако в мире .NET после осознания того, что каждый уровень является собственной сборкой, и сборки часто заменяются сборками, реализующими тот же интерфейс / интерфейсы, я обнаружил, что пространство имен является наиболее важным / эффективным изменением, и отбросил префиксы и суффиксы, специфичные для класса, по большей части.
Например, у меня были Customer
(бизнес) и CustomerDAL
(уровень доступа к данным)
.. и это часто было изменил в моих последних проектах на, соответственно, ...
Com.Example.ProjectName.Business.Customer
и Com.Example.ProjectName.Data. Клиент
с интерфейсом ICustomer
, который используется между ними вместо прямого доступа к какому-либо конкретному классу в целевом проекте.
Обычно, путем реализации суффикс или префикс класса , которые вы пытаетесь предотвратить от конфликтов имен между тесно связанными сборками .
Однако обычно рекомендуется иметь слабосвязанные сборки посредством интерфейсов ; побочный эффект - вы больше не используете имя конкретного класса напрямую. В противном случае, используя тесно связанные сборки, вы могли бы также объединить их в одну сборку, потому что они напрямую зависят друг от друга, и преимущества отдельных сборок уменьшаются.
Иногда в моем программном обеспечении используется более описательный подход, например классы Customer и CustomerData , и я понимаю, что здесь используется суффикс, но это сделано для естественного потока, а не для предотвращения конфликты именования, потому что мой интерфейс находится между ними независимо.
В двух словах, низкая связность снимает вопрос о том, какие классы должны / могли / могли бы быть названы на любом уровне проекта относительно друг друга. А поскольку у вас уже есть отдельные сборки для бизнеса и данных, вы должны неявно хотеть, чтобы присутствовала низкая связность. Итак, мой ответ в контексте разработки приложения: суффикс или префикс класса объективно не лучше в соответствии с концепцией вопроса.
Для полезного примера кода я ' Это то же самое, что сказал Дуглас Тоси .
Это очень хорошо видно в таких инструментах, как полная версия IBExpert или в IBAnalist
Согласно FirebirdFAQ максимальный размер ключа в Firebird 2.x составляет одну четверть размера страницы. Если размер страницы составляет 4096 байт, то максимальный размер ключа - 1024 байта.
.
UTF8 варвары резервируют полные 32 бита на символ, даже если он может использовать меньше места. Таким образом, в UTF8 варвар(255) составляет 1020 байт. Не знаю, почему это достигает предела, но в любом случае я бы увеличил размер страницы или попробовал бы использовать варчар(254).