Ответ аномии хорош, но я чувствовал себя неуверенно в этом, поэтому решил добавить пару скриншотов.
Посмотрите, где вы находитесь git log
. Самое главное, найдите хеш фиксации первой фиксации, которую вы не хотите , чтобы сквош. Таким образом, только:
Выполнить git rebase -i [your hash]
, в мой случай:
$ git rebase -i 2d23ea524936e612fae1ac63c95b705db44d937d
В моем случае я хочу раздавить все на коммит, который был первым во времени. Порядок от первого до последнего, так точно так же, как в git log
. В моем случае я хочу:
Если вы выбрали только одно коммит и раздавили остальное, вы можете настроить одно сообщение фиксации:
Вот и все. Как только вы сохраните это (:wq
), все готово. Посмотрите на это с помощью git log
.
Я рекомендую проверить образцы баз данных Microsoft SQL Server: https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks
The AdventureWorks sample использует очень четкое и последовательное соглашение об именах, которое использует имена схем для организации объектов базы данных.
Названия таблиц всегда должны быть сингулярными, поскольку они представляют собой набор объектов. Как вы говорите, стадо назначать группу овец, или стадо обозначают группу птиц. Нет необходимости во множественном числе. Когда имя таблицы представляет собой состав из двух имен, а соглашение об именах во множественном числе, становится трудно узнать, должно ли имя множественного числа быть первым словом или вторым словом или и тем, и другим. Это логика - Object.instance, а не object.instance. Или TableName.column, а не TableNames.column (s). Microsoft SQL не чувствителен к регистру, легче читать имена таблиц, если используются буквы верхнего регистра, для разделения имен таблиц или столбцов, когда они состоят из двух или более имен.
Основные обозначения именования баз данных (и стиль) (нажмите здесь для более подробного описания).
имена таблиц выбирают короткие, недвусмысленные имена, используя не более одного или двух слов, различать таблицы легко облегчают именование уникальных имен полей, а также таблицы поиска и привязки, дают таблицы сингулярных имен, а не множественное число (обновление: я по-прежнему согласен с причинами, данными для этого соглашения, но большинство людей действительно любят множественные имена таблиц, поэтому я смягчил мою позицию) ... перейдите по ссылке выше, пожалуйста,
Вот ссылка, которая предлагает несколько вариантов. Я искал простую спецификацию, которой я мог следовать, вместо того, чтобы полагаться на частично определенный.
Я постоянно слышу, что аргумент о том, что плюрализуется таблица, - это все, что касается личного вкуса, и нет лучшей практики. Я не верю, что это правда, особенно как программист, а не DBA. Насколько мне известно, нет никаких законных оснований для плюрализации имени таблицы, отличного от «Это просто имеет смысл для меня, потому что это коллекция объектов», хотя есть законные выигрыши в коде с помощью уникальных имен таблиц. Например:
Подводя итог, если вы дублируете свои имена таблиц, вы теряете все виды преимущества в том, чтобы сделать ваш код умнее и проще в обращении. Могут даже быть случаи, когда вы должны иметь таблицы поиска / массивы для преобразования имен таблиц в имена объектов или локальных кодов, которых вы могли бы избежать. Сингулярные имена таблиц, хотя, возможно, сначала немного странные, дают существенные преимущества перед плюрализованными именами, и я считаю, что это лучшая практика.
Хорошо. Thats мои $ 0,02
Я знаю, что это уже поздно, и на этот вопрос уже был дан очень хорошо, но я хочу предложить свое мнение о №3 относительно префикса имен столбцов.
Все столбцы должны быть named с префиксом, который уникален для таблицы, в которой они определены.
Например Учитывая таблицы «клиент» и «адрес», давайте перейдем с префиксами «cust» и «addr» соответственно. «клиент» имел бы «cust_id», «cust_name» и т. д. в нем. «address» будет иметь «addr_id», «addr_cust_id» (FK обратно к клиенту), «addr_street» и т. д.
Когда мне впервые был представлен этот стандарт, я был мертв против Это; Я ненавидел эту идею. Я не мог выдержать идею о том, что это лишний набор и избыточность. Теперь у меня было достаточно опыта, чтобы я никогда не возвращался.
Результат этого заключается в том, что все столбцы в вашей схеме базы данных уникальны. Для этого есть одно важное преимущество, которое превосходит все аргументы против него (на мой взгляд, конечно):
Вы можете искать всю базу кода и надежно находить каждую строку кода, которая касается конкретного столбца.
Преимущество №1 невероятно велико. Я могу обесценить столбец и точно знать, какие файлы необходимо обновить до того, как столбец можно безопасно удалить из схемы. Я могу изменить значение столбца и точно знать, какой код нужно реорганизовать. Или я просто могу сказать, используются ли данные из столбца в определенной части системы. Я не могу сосчитать количество раз, когда это превратило потенциально огромный проект в простой, а также количество часов, которые мы сохранили в процессе разработки.
Еще одна, относительно небольшая польза от этого - это то, что вам нужно использовать табличные псевдонимы, когда вы делаете самостоятельное соединение:
SELECT cust_id, cust_name, addr_street, addr_city, addr_state
FROM customer
INNER JOIN address ON addr_cust_id = cust_id
WHERE cust_name LIKE 'J%';
Я работаю в команде поддержки базы данных с тремя администраторами баз данных, и наши рассмотренные варианты:
Мы используем уникальные имена для таблиц. Таблицы имеют префикс с именем системы (или ее сокращением). Это полезно, если системный комплекс, поскольку вы можете изменить префикс для логической группировки таблиц (например, reg_customer, reg_booking и regadmin_limits).
Для полей мы ожидаем, что имена полей будут включать префикс / acryonm таблицы (т.е. cust_address1), и мы также предпочитаем использовать стандартный набор суффиксов (_id для PK, _cd для «code», _nm для «name», _nb для «number», _dt для «Date») .
Имя поля ключа Foriegn должно совпадать с полем основного поля.
т.е.
SELECT cust_nm, cust_add1, booking_dt
FROM reg_customer
INNER JOIN reg_booking
ON reg_customer.cust_id = reg_booking.cust_id
При разработке нового проекта я бы рекомендовал вам выписать все предпочтительные имена сущностей, префиксы и акронимы и предоставить этот документ вашим разработчикам. Затем, когда они решают создать новую таблицу, они могут ссылаться на документ, а не «угадывать», что должны быть вызваны таблицей и полями.
Хорошо, поскольку мы взвешиваем мнение:
Я считаю, что имена таблиц должны быть множественными. Таблицы представляют собой коллекцию (таблицу) объектов. Каждая строка представляет собой единый объект, а таблица представляет коллекцию. Таким образом, я бы назвал таблицу лиц Людей Людей (или Лиц, независимо от того, что берет ваше воображение).
Для тех, кто любит видеть «запросы сущностей» в запросах, я бы использовал табличные псевдонимы для:
SELECT person.Name
FROM People person
Немного напоминает LINQ «от человека в людях, который выбирает человека. Имя».
Что касается 2, 3 и 4, я согласен с @Lars.
Мое мнение о них:
1) Нет, имена таблиц должны быть сингулярными.
Хотя кажется, что имеет смысл для простого выбора (select * from Orders
), это делает меньше смысла для эквивалента OO (Orders x = new Orders
).
Таблица в БД действительно является набором этого объекта, имеет смысл, когда вы используете set-logic:
select Orders.*
from Orders inner join Products
on Orders.Key = Products.Key
Эта последняя строка, фактическая логика соединения, выглядит запутанной с именами множественных таблиц.
Я не уверен, что всегда использую псевдоним (как утверждает Мэтт). / g5]
2) Они должны быть сингулярными, поскольку они содержат только 1 свойство
3) Никогда, если имя столбца неоднозначно (как указано выше, где оба они имеют столбец с именем [Key]), имя таблицы (или ее псевдоним) может отличить их достаточно хорошо.
4) Что бы вы ни хотели, я бы предложил CapitalCase
. Я не думаю, что есть один набор абсолютные рекомендации по любому из них.
Пока все, что вы выбираете, согласовано в приложении или БД, я не думаю, что это действительно имеет значение.
--Example SQL
CREATE TABLE D001_Students
(
StudentID INTEGER CONSTRAINT nnD001_STID NOT NULL,
ChristianName NVARCHAR(255) CONSTRAINT nnD001_CHNA NOT NULL,
Surname NVARCHAR(255) CONSTRAINT nnD001_SURN NOT NULL,
CONSTRAINT pkD001 PRIMARY KEY(StudentID)
);
CREATE INDEX idxD001_STID on D001_Students;
CREATE TABLE D002_Classes
(
ClassID INTEGER CONSTRAINT nnD002_CLID NOT NULL,
StudentID INTEGER CONSTRAINT nnD002_STID NOT NULL,
ClassName NVARCHAR(255) CONSTRAINT nnD002_CLNA NOT NULL,
CONSTRAINT pkD001 PRIMARY KEY(ClassID, StudentID),
CONSTRAINT fkD001_STID FOREIGN KEY(StudentID)
REFERENCES D001_Students(StudentID)
);
CREATE INDEX idxD002_CLID on D002_Classes;
CREATE VIEW V001_StudentClasses
(
SELECT
D001.ChristianName,
D001.Surname,
D002.ClassName
FROM
D001_Students D001
INNER JOIN
D002_Classes D002
ON
D001.StudentID = D002.StudentID
);
Это конвенции, которым меня учили, но вы должны адаптироваться ко всему, что использует ваш шланги.
Я думаю, что лучший ответ на каждый из этих вопросов будет дан вами и вашей командой. Гораздо важнее иметь соглашение об именах, то как именно согласуется именование.
Поскольку нет правильного ответа на это, вы должны потратить некоторое время (но не слишком много) и выбрать свои собственные соглашения и - здесь важная часть - придерживайтесь его.
Конечно, полезно искать некоторую информацию о стандартах по этому вопросу, о чем вы просите, но не беспокойтесь или беспокоиться о количестве различных ответов, которые вы можете получить: выберите тот, который кажется вам лучше.
На всякий случай, вот мои ответы:
наше предпочтение:
Update person set property = 'value'
действует на каждого человека в таблице. Select * from person where person.name = 'Greg'
возвращает набор строк / строк строк. bob = new person()
bob.person_name = 'Bob'
bob.person_dob = '1958-12-21'
... очень читабельна и ясна. Это может выйти из-под контроля: customer.customer_customer_type_id
указывает на связь между клиентом и таблицей customer_type, указывает первичный ключ в таблице customer_type (customer_type_id), и если вы когда-либо видите «customer_customer_type_id» при отладке запроса, вы сразу же знаете, где это - из (таблица клиентов). или где у вас есть отношения MM между customer_type и customer_category (только определенные типы доступны для определенных категорий). customer_category_customer_type_id
... немного (!) на длинной стороне. SELECT
UserID, FirstName, MiddleInitial, LastName
FROM Users
ORDER BY LastName
Я также поддерживаю соглашение об именах стилей ISO / IEC 11179, отмечая, что они являются рекомендациями, а не предписывающими.
См. Имя элемента данных в Википедии :
«Таблицы представляют собой коллекции сущностей и следуют правилам именования коллекций. В идеале используется коллективное имя: например,« Персонал ». Плюрализм также правильный:« Сотрудники ». Неправильные имена включают в себя: Employee, tblEmployee и EmployeeTable. "
Как всегда, существуют исключения из правил, например таблица, которая всегда имеет ровно одну строку, может быть лучше с единственным именем, например. таблицу конфигурации. И согласованность имеет первостепенное значение: проверьте, есть ли у вас магазин соглашение и, если да, следуйте ему; если вам это не нравится, тогда сделайте бизнес-кейс, чтобы он изменился, а не одиноким рейнджером.
Названия таблиц единичные. Предположим, вы моделировали реальность между кем-то и их адресом. Например, если вы читаете datamodel, вы бы предпочли «каждый человек может жить на 0,1 или много адресов». или «каждый человек может проживать по 0,1 или много адресов». Я считаю, что его проще адресовать адрес, а не перефразировать людей как личность. Плюс коллективные существительные довольно часто расходятся с сингулярным вариантом.
Поздний ответ здесь, но вкратце:
Разработка:
(1) Что вы должны делать. Есть очень немного вещей, которые вы должны делать делать определенным образом, каждый раз, но есть несколько.
(2) Что вы, вероятно, должны сделать.
(3) ; некоторые думают единственное. Прочитайте аргументы в другом месте. Имена столбцов должны быть единственными. Даже если вы используете множественные имена таблиц, таблицы, представляющие комбинации других таблиц, могут быть в единственном числе. Например, если у вас есть Акции и таблица Items , таблица, представляющая элемент, являющийся частью рекламного объявления, может быть Promotions_Items, но также может быть законно объявлена Promotion_Items I (отражает отношение «один ко многим»).
Взгляните на ISO 11179-5: Принципы именования и идентификации. Вы можете получить его здесь: http://metadata-standards.org/11179/#11179-5
Я писал об этом некоторое время назад: ISO-11179 Соглашения об именах
На мой взгляд:
Однако, как и было упомянуто, любое соглашение лучше, чем никакое соглашение. Независимо от того, как вы это сделаете, запишите его, чтобы изменения в будущем соответствовали тем же соглашениям.
Соглашения об именах позволяют команде разработчиков разрабатывать открытость и ремонтопригодность в центре проекта.
Хорошее соглашение об именах требует времени для развития, но как только оно на месте, оно позволяет команде двигаться вперед с использованием общего языка. Хорошее соглашение об именах органично развивается с проектом. Хорошее соглашение об именах легко справляется с изменениями в течение самой продолжительной и самой важной фазы жизненного цикла программного обеспечения - управление услугами в производстве.
Вот мои ответы:
Именование жестко, но в каждой организации есть кто-то, кто может назвать вещи, и в каждой команде программного обеспечения должен быть кто-то, кто берет на себя ответственность за стандарты прошивки и гарантирует, что проблемы с именованием, такие как sec_id , sec_value и security_id будут решены раньше, чем они будут запечены в проекте.
Итак, каковы основные принципы хорошего именования соглашение и стандарты: -