Почему Symfony 3.4 / Doctrine 2.6 убирает ограничение UNIQUE для моего поля идентификатора? - PullRequest
0 голосов
/ 17 января 2019

Я работаю над переносом существующего проекта Symfony 2.8 на Symfony 3.4. Кроме Symfony я обновил и некоторые другие компоненты, например Doctrine:

                                  Symfony 2.8       Symfony 3.4
------------------------------------------------------------------------
symfony/symfony                   v2.8.49           v3.4.21
doctrine/annotations                       v1.6.0           
doctrine/cache                             v1.8.0         
doctrine/collections                       v1.5.0
doctrine/common                   v2.8.1            v2.10.0
doctrine/dbal                     v2.6.3            v2.9.2
doctrine/doctrine-bundle                   1.10.0
doctrine/doctrine-cache-bundle             1.3.5
doctrine/event-manager                              v1.0.0
doctrine/inflector                         v1.3.0
doctrine/instantiator                      1.1.0
doctrine/lexer                             v1.0.1
doctrine/orm                      v2.5.14           v2.6.3 
doctrine/persistence                                v1.1.0
doctrine/reflection                                 v1.0.0 

На некоторых объектах я использую GUID в качестве первичного ключа:

class SomeEntity {
    /**
     * @ORM\Id
     * @ORM\Column(name="guid", type="guid", unique=true)
     */
    protected $guid;

    ...
 }

БД, созданная с помощью проекта SF 2.8, использует ограничения PRIMARY и UNIQUE для этих полей. Однако при запуске обновления БД с помощью SF 3.4 доктрина хочет снять ограничения UNIQUE:

bin/console doctrine:schema:update --dump-sql

The following SQL statements will be executed:

 DROP INDEX UNIQ_D3D1CD162B6FCFB2 ON some_enitiy;

Это правильно?

Поскольку поля все еще определены как PRIMARY, они все равно должны быть уникальными, и я предполагаю, что будет сохранено удаление свойства UNIQUE. Но можно ли это сделать?

Является ли обновленная версия Doctrine более умной и минимизирует избыточное определение только от PRIMARY и UNIQUE до PRIMARY, или есть какая-то другая причина для такого поведения?

1 Ответ

0 голосов
/ 17 января 2019

Это правильно.

Вам не нужно УНИКАЛЬНОЕ в ПЕРВИЧНОМ поле.

Хотя использование UNIQUE и PRIMARY не является ошибкой, UNIQUE является избыточным (замедляет работу базы данных, занимает больше места на диске) и может быть безопасно удален и должен быть удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...