У меня есть сущность SomeMainEntity, которая расширяет MainEntity. SomeMainEntity содержит GroupEntity, а также коллекцию SubEntity. SQL будет:
MainEntity
- id (целое число автоинкремента PK)
SomeMainEntity расширяет MainEntity
- id (ассоциация= true => один-к-одному от PK / FK до main_entity.id)
- group_entity_id (от многих к одному FK до group_entity.id)
GroupEntity
- id (целое число автоинкремента PK)
SubEntity
- id (целое число автоинкремента PK)
- some_main_entity_id (много-к-одному FKto some_main_entity.id)
- name
Теперь я хочу изменить SubEntity, чтобы имя было уникальным для данного GroupEntity в SomeMainEntity. Я попробовал следующее:
SubEntity
- id (целочисленное автоинкрементное PK)
- some_main_entity_id (FK для some_main_entity.id, FK для some_main_entity. group_entity_id)
- name
Но это, очевидно, не сработает, потому что some_main_entity id / group_entity_id, очевидно, должно быть составным PK. Кроме того, поскольку SomeMainEntity расширяет MainEntity, это становится немного сложнее, если не невозможно. Я также пытался создать уникальный ключ в SomeMainEntity, но Doctrine, похоже, не поддерживает (https://stackoverflow.com/a/24364419/1032531)
В качестве другой попытки я добавил GroupEntity как свойство в SubEntity
SubEntity
- id (целое число с автоинкрементом PK)
- some_main_entity_id (FK "многие-к-одному" к some_main_entity.id)
- group_entity_id (много-к-одному FK-group_entity.id)
- name
Теперь я могу добавить уникальное ограничение между name и group_entity_id, однако это действительно неправильно, поскольку оно не гарантирует, что данный связанный MainEntity также содержит то же самоеGroupEntity.
Как это можно сделать?