С наконец, можно очистить ресурсы, даже если оператор выгоды выдает исключение до программы вызова. С Вашим примером, содержащим пустой оператор выгоды, существует мало различия. Однако, если в Вашей выгоде, Вы сделаете некоторую обработку и бросите ошибку, или даже просто не будете даже иметь выгоды вообще, то наконец будет все еще выполнен.
Это зависит.
Вы видите свои данные больше как набор объектов (а реляционная база данных - это просто носитель информации) или как набор фактов, представленных и проанализированных изначально реляционной алгеброй.
Некоторые ORM / Frameworks / Tools не имеют хорошей поддержки многоколоночных первичных ключей. Если вы используете один из них, вам понадобится дополнительный столбец идентификатора.
Если это просто связь «многие ко многим» без дополнительных данных, связанных с ней, лучше избегать дополнительного столбца идентификатора и использовать оба столбца в качестве первичного ключа.
Если вы начнете добавлять некоторую дополнительную информацию к этой ассоциации, то она может достичь точки, когда она станет нечто большее, чем отношение «многие ко многим» двух сущностей. Он становится самостоятельной сущностью, и было бы удобнее, если бы у него был собственный идентификатор. не зависит от подключаемых объектов.
Вам не требуется для добавления дополнительного столбца индекса с автоинкрементом, но я (возможно, в отличие от большинства других) все же рекомендую это сделать. Во-первых, в прикладной программе проще ссылаться на строку с помощью одного номера, например, когда вы удаляете строку. Во-вторых, иногда бывает полезно знать порядок, в котором были добавлены строки.
Нет, в этом нет необходимости, учитывая, что эти два столбца уже выполняют функцию первичного ключа.
Этот третий столбец просто добавит больше места в вашу таблицу.
Но ... Вы могли бы использовать это, возможно, чтобы увидеть порядок, в котором ваши записи были добавлены в вашу таблицу. Это единственная функция, которую я вижу в этом столбце.
Вам не нужно добавлять столбец индекса с автоинкрементом. Стандартная практика - использовать только два существующих столбца в качестве первичного ключа для таблиц ассоциации M: M, как вы описываете.
Я бы сделал первичный ключ category_id и product_id. Добавляйте автоматическое приращение только в том случае, если порядок когда-либо будет актуален для дальнейшего использования.
Возникает концептуальный вопрос: является ли products_categories сущностью или просто таблицей, которая представляет отношения между двумя сущностями? Если это сущность, то, даже если нет дополнительных атрибутов, я бы выступал за отдельный столбец идентификатора для этой сущности. Если это связь, если есть дополнительные атрибуты (например, begin_date, end_date или что-то в этом роде), я бы рекомендовал иметь первичный ключ с несколькими столбцами.