В Swift версии 3.0.2 используйте это:
masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 5)
Вы можете использовать $ ("# elementID"). Height () == 0, так как вы знаете, что он будет либо вверх, либо вниз. Это может быть быстрее, чем выполнение .is (": visible"), но я не тестировал этот факт.
sqlservercentral.com/articles/T-SQL/66097/)[1279 visibleDocumentation Нормализация и ссылочная целостность
Обслуживание: периодически запускать сценарии, чтобы найти
Будьте хороши
Одна вещь, о которой я еще не упоминал:
Никогда не используйте ключевые слова базы данных в качестве имен объектов. Вы не хотите, чтобы их уточняли каждый раз, когда вы их используете
. Если вы что-то опечатали при создании, исправьте это, как только заметите это. Не тратьте годы на то, чтобы помнить, что в этой таблице UserName на самом деле является Usernmae. Это намного проще исправить, когда против него написано не так много кода.
Никогда не используйте подразумеваемые соединения (синтаксис запятой), всегда указывайте соединения.
Мне нравится наше соглашение об именах таблиц:
People Table
PEO_PersonID
PEO_FirstName
...
Это помогает сделать большие запросы более удобочитаемыми. и объединения имеют немного больше смысла:
Select * -- naughty!
From People
Join Orders on PEO_PersonID = ORD_PersonID
--...
я полагаю, что скорее не то, что такое соглашение об именах, а согласованность именования.
Если взять слово «база данных» как «продукт SQL», я отвечу: «Слишком много, чтобы упоминать. Вы могли бы написать целую книгу на эту тему». К счастью, у кого-то есть.
Мы используем стиль программирования SQL Джо Селко (ISBN 978-0120887972): «эта книга представляет собой набор эвристик и правил, советов и приемов, которые помогут вам улучшить стиль программирования SQL и повысить его квалификацию, а также для форматирования и написания переносимых, читаемый, поддерживаемый код SQL ».
Среди преимуществ этого подхода:
Документируйте все; Документация вики-типа проста в установке, а программное обеспечение бесплатное.
Убедитесь, что вы понимаете интерфейс в первую очередь, а во вторую - спроектируйте базу данных. В большинстве случаев гораздо лучше знать, как данные, которые вы собираетесь использовать, должны работать, а затем создавать базу данных. В большинстве случаев плохой дизайн БД происходит по мере развития событий, а не сразу.
Затем определите стандарт и версию базы данных, над которой вы собираетесь работать. Определить стандарты для элементов кода (представления, функции и т.д.), именования базы данных; соглашения об именах для столбцов, таблиц; соглашения о типах столбцов; шаблоны кодирования.
Потратьте время на то, чтобы обдумать, как вы определяете типы, имеющие стандартные типы базы данных для полей или специальные типы - это хорошая вещь, которую нужно разобрать заранее.
В качестве части вашей документации включите список того, что нельзя делать.
13- Evaluate your queries
Thats true. Sometimes you don't get what you wanted.
For me, it's always useful to name the tables and fields with their exact content and (for us) in clear spanish and using Upper Camel Case, with no whitespaces:
User Name: NombreUsuario
First Last Name: ApellidoPaterno
Second Last Name: ApellidoMaterno
etc etc
В MS-SQL у меня всегда были объекты, принадлежащие dbo., И я префикс для вызовов этих объектов с помощью dbo.
Слишком много раз я видел, как наши разработчики задаются вопросом, почему они не могут называть свои объекты, которыми они случайно владели.
Я согласен практически со всем, что вы там написали, кроме №5. Я часто использую префиксы для таблиц и хранимых процедур, потому что системы, которые мы разрабатываем, имеют множество различных функциональных областей, поэтому я буду стремиться префикс таблиц и sprocs с идентификатором, который позволит им хорошо группироваться в Management Studio в зависимости от того, в какой области они принадлежат.
Пример: cjso_Users, cjso_Roles, а затем у вас есть routing_Users, routing_Roles. Это может звучать как репликация данных, но на самом деле две разные таблицы пользователей / ролей предназначены для совершенно разных функций системы (cjso будет для клиентского приложения электронной коммерции, а маршрутизация - для сотрудников и дистрибьюторов, которые используют маршрутизацию. система).
Некоторые другие (хотя и небольшие) комментарии, которые стоит бросить в стену ...
Схемы базы данных SQL Server могут быть полезны как для организации таблиц и хранимых процедур, так и для контроля безопасности.
Каждая транзакционная таблица всегда должна отслеживать, кто и когда создал запись, а также обновлять запись в отдельных столбцах. Я видел реализацию, в которой просто использовалась «дата обновления», что может привести к проблемам аудита в будущем.
Используйте GUID для идентификаторов строк для всех строк для проектов с требованиями оффлайн / синхронизации.
Несколько лайков и антипатий.
Я считаю, что префиксы ужасны во всех отношениях. В настоящее время я работаю в системе, в которой таблицы имеют префиксы, а столбцы в таблицах имеют префиксы с двухбуквенными аббревиатурами имен таблиц, я трачу не менее 30 минут каждый день на работу с этой базой данных, потому что это сокращение не логично. Если вы хотите обозначить что-либо с префиксом, используйте вместо этого владельца схемы.
Использование NVarchar с самого начала проекта, если есть хотя бы небольшой намек на то, что текстовые данные должны поддерживать многоязычные символы. Обновление больших баз данных из-за отсутствия перспективного планирования и размышлений - это боль и трата времени.
Разделение каждого условия в предложении where на новую строку для удобства чтения (внутри, а не внутри операторов, заключенных в скобки и заключенных в табуляцию). это важный стандарт для меня.
Я работал в одной компании, где стандартом было то, что запятую всегда нужно ставить в начале строки при выполнении объявления параметров или переменных. Очевидно, это сделало его более читабельным, однако я нашел его полным кошмаром.
s всегда следует помещать в начало строки при выполнении объявления параметров или переменных. Очевидно, это сделало его более читабельным, однако я нашел его полным кошмаром. s всегда следует помещать в начало строки при выполнении объявления параметров или переменных. Очевидно, это сделало его более читабельным, однако я нашел его полным кошмаром.Не используйте имена типов в именах полей. Ребята постарше будут помнить старый стандарт MS для lpszFieldName и последовавшую за этим глупость.
Используйте описательные имена полей, которые следуют обычным языковым соглашениям. Например, «FirstName» вместо «NameFirst»
Каждое слово в имени поля пишется с заглавной буквы
Без подчеркивания
Не используйте обычные ключевые слова, такие как «Index»
Не используйте префикс НИЧЕГО с типом объекта . Например, мы НЕ используем tblCustomers или spCustomersGet. Они не обеспечивают хорошую сортировку и предоставляют нулевое значение.
Используйте схемы для определения отдельных областей базы данных. Например, отдел продаж, клиенты и сотрудники. Это позволит избавиться от большинства используемых людьми префиксов.
Любые петли следует рассматривать с подозрением. Обычно есть способ лучше, основанный на наборе.
Используйте виды для сложных объединений.
По возможности избегайте сложных объединений. Было бы более эстетично иметь таблицу CustomerPhoneNumbers; но честно говоря, сколько телефонных номеров нам действительно нужно хранить? Просто добавьте поля в таблицу «Клиенты». Ваши запросы к БД будут быстрее и их будет намного легче понять.
Если одна таблица вызывает поле «EmployeeId», то КАЖДАЯ ТАБЛИЦА, которая ссылается, должна использовать это имя. Его не нужно называть CustomerServiceRepId только потому, что он находится в таблице расширений.
Почти все таблицы имеют окончание «s». Например: клиенты, заказы и т. Д. В конце концов, таблица содержит много записей ...
Оцените свои запросы, индексы и отношения внешних ключей с помощью инструмента анализа. Даже те, которые могут быть созданы для вас. Вы можете быть удивлены.
Связывающие таблицы, которые поддерживают отношения "многие ко многим", имеют обе связанные таблицы в имени. Например, SchoolsGrades. По названию таблицы очень легко понять, что она делает.
БУДЬТЕ ПОГОДНЫ. Если вы начнете идти по одному пути со своими соглашениями, не меняйте лошадей на полпути, если только вы не хотите реорганизовать всю предыдущую работу. Это должно затормозить любые идеи типа «было бы здорово, если ...», которые в конечном итоге вызывают путаницу и огромное количество переделок.
Подумайте, прежде чем печатать. Вам действительно нужна эта таблица, поле, sproc или представление? Вы уверены, что это не где-то еще? Получите консенсус, прежде чем добавлять его. И если по какой-то причине вам нужно его убрать, сначала поговорите со своей командой. Я был в местах, где администраторы баз данных вносили ежедневные критические изменения, не обращая внимания на разработчиков. Это не весело.
Если база данных предназначена для определенного приложения, имейте таблицу версий, чтобы выпуски базы данных можно было сравнивать с выпусками кода (среди прочего).
Предложение WITH действительно помогает разбивать запросы на управляемые части.
Это также действительно помогает повысить эффективность планов выполнения запросов.
Все пишут запросы SQL (представления, хранимые процедуры и т. Д.) В одном и том же базовом формате. Это действительно помогает усилиям по развитию / поддержке в будущем.
Согласованные стандарты именования. Наличие всех на одной странице, использование одного и того же формата (будь то Camel Case, определенные префиксы и т. Д.) Помогает в обеспечении точного обслуживания системы.
Я всегда стараюсь не использовать тип в имени поля - «sFirstName», «sLastName» или «iEmployeeID». Хотя сначала они совпадают, но если что-то изменится, они будут рассинхронизированы, и изменить эти имена позже станет огромной головной болью, так как вам также придется изменить зависимые объекты.
Intellisense и инструменты графического интерфейса делают это тривиально выяснить, какого типа столбец, поэтому я не считаю это необходимым.
В дополнение к нормализации до 3NF или BCNF (подробнее об этом в этом вопросе ) я обнаружил, что следующие полезны:
Итак, в таблице «Люди» есть столбец «PersonID» .
не забывайте регулярно делать резервные копии баз данных.
Мои стандарты для Oracle:
В SQL Server единственной модификацией является использование верблюжьего регистра для имен объектов базы данных (т.е. PartyName вместо party_name).
Запросы будут записываться в несколько строк с одним предложение или условие на строку:
SELECT field1, field2, field2
FROM tablename t1
JOIN tablename2 t2 ON t1.id = t2.tablename_id
WHERE t1.field1 = 'blah'
AND t2.field2 = 'foo'
Если предложение SELECT достаточно длинное, я разделю его по одному полю на строку.
SQL в табличном формате.
select a.field1, b.field2
from any_table a
inner join blah b on b.a_id = a.a_id
inner join yet_another y on y.longer_key = b.b_id
where a.field_3 > 7
and b.long_field_name < 2;
Частью этого является использование одинаково длинных псевдонимов (в данном примере a, b и y имеют длину 1).
С при таком форматировании я могу быстрее отвечать на распространенные вопросы, например, "какая таблица имеет псевдоним" a "?" и "какие поля присоединяются к таблице T в запрос?" Структура не занимает много времени, чтобы применить или обновить, и я считаю, что это экономит много времени. Мы тратим больше времени на чтение кода, чем на его написание.
Убедитесь, что каждый вариант varchar / nvarchar является подходящим.
Убедитесь, что каждый вариант столбца, допускающий значение NULL, является подходящим - избегайте столбцов, допускающих значение NULL, где это возможно - разрешение NULL должно быть оправданным положением
. 1246] Независимо от каких-либо других правил, которые вы можете использовать из приведенных здесь предложений, я бы создал хранимую процедуру в базе данных, которая может запускаться на регулярной основе для определения работоспособности системы для любых правил или стандартов, которые у вас есть (некоторые из них немного специфично для SQL-сервера):
Ищите потерянные записи в тех случаях, когда ссылочная целостность системы СУБД по какой-то причине не может использоваться (в моей системе у меня есть таблица процессов и таблица тестов - так что мой системный пакет system_health выглядит для процессов без испытаний,поскольку у меня только односторонняя связь FK)
Ищите пустые схемы
Ищите таблицы без первичных ключей
Ищите таблицы без индексов
Ищите объекты базы данных без документации (мы используем SQL Server Расширенные свойства для помещения документации в базу данных - эта документация может быть такой же детальной, как столбец ).
Ищите системные проблемы - таблицы, которые необходимо архивировать, исключения, которые не являются частью обычная ежемесячная или ежедневная обработка, некоторые общие имена столбцов со значениями по умолчанию или без них (например, CreateDate).
Ищите недетерминированные UDF.
Ищите комментарии TODO, чтобы убедиться, что код в БД не имеет непроверенных или предварительно -код выпуска.
Все это можно автоматизировать, чтобы получить общую картину состояния системы.
исключения, которые не являются частью обычной ежемесячной или ежедневной обработки, некоторые общие имена столбцов со значениями по умолчанию или без них (например, CreateDate).Ищите недетерминированные UDF.
Ищите комментарии TODO, чтобы убедиться, что код в БД выполняет у вас каким-то образом нет непроверенного или предварительного кода.
Все это можно автоматизировать, чтобы дать вам общую картину состояния системы.
исключения, которые не являются частью обычной ежемесячной или ежедневной обработки, некоторые общие имена столбцов со значениями по умолчанию или без них (например, CreateDate).Ищите недетерминированные UDF.
Ищите комментарии TODO, чтобы убедиться, что код в БД выполняет у вас каким-то образом нет непроверенного или предварительного кода.
Все это можно автоматизировать, чтобы дать вам общую картину состояния системы.
Имя таблицы совпадает с именем первичного ключа и ключом описания
Совсем недавно, после многих лет согласия с этим, я покинул корабль, и теперь в каждой таблице есть столбец «ID».
Да, я знаю, при связывании таблиц это ужасно! Но то же самое происходит с привязкой ProductID к ProductID, так что зачем лишняя типизация?
Это:
SELECT p.Name, o.Quantity FROM Products p, Orders o WHERE o.ProductID = p.ID
Немного лучше, чем это:
SELECT p.Name, o.Quantity FROM Products p, Orders o WHERE o.ProductID = p.ProductID
Обратите внимание, что оба потребуют префиксов таблиц или псевдонимов. Но я не только печатаю немного меньше (умножьте это на десятки таблиц с длинными описательными именами, и это быстро складывается в приложении с интенсивным использованием данных), но также упрощает определение того, какая таблица является родительской таблицей в каждом соединении, что, при объединении 8-10 таблиц в запрос может немного помочь.
Избегайте глупых условных обозначений, таких как исчерпывающие словари сокращений, которые активно поощряют чудовищ, таких как EMP_ID_CONV_FCTR_WTF_LOL_WAK_A_WAK_HU_HU. Это правило вдохновлено настоящим набором рекомендаций, которые я видел раньше.
Я следую многим из тех же конвенций, что и другие здесь, но я хотел сказать несколько вещей, которые еще не были сказаны.
Независимо от того, любите ли вы множественные или единственные имена для ваших таблиц, будьте последовательны. Выбирайте одно или другое, но не используйте оба.
Первичный ключ в таблице имеет то же имя, что и таблица, с суффиксом _PK. Иностранные ключи имеют то же имя, что и соответствующий им первичный ключ, но с суффиксом _FK. Например, первичный ключ в таблице "Продукт" называется "Product_PK"; в таблице "Заказы" соответствующий внешний ключ называется "Product_FK". Я подобрал эту привычку у другого моего друга по DBA, и пока что она мне нравится.
Всякий раз, когда я делаю INSERT INTO...SELECT, я называю псевдонимом все столбцы в разделе SELECT, чтобы они совпадали с именами столбцов из раздела INSERT INTO, чтобы было проще обслуживать их и видеть, как они совпадают.
Самый важный стандарт: не иметь базы данных по умолчанию. Я обнаружил, что слишком много разработчиков хватаются за базы данных для проектов, без которых жизнь была бы намного проще (по крайней мере, пока). Это просто инструмент в наборе инструментов, и не всякая проблема - гвоздь.
Неправильное использование базы данных приводит к анемичным моделям предметной области, плохо тестируемому коду и ненужным проблемам с производительностью.