Tengo dos entidades: Organización y OfficeLocation donde una Organización puede tener muchas OfficeLocations.
Cada OfficeLocation puede tener su propio apodo, que debe ser único dentro de la organización.
Esto me hace pensar que debería tener una restricción @Unique compuesta por nickName y organization .
La pregunta es: ¿cómo declaro esto en la entidad OfficeLocation? Mirando los documentos de mikro-orm, aprendí que puedo definir la restricción @Unique a nivel de entidad o de propiedad.
Si declaro en el nivel de propiedad, estaré creando una restricción que me impedirá incluir una ubicación de oficina de otra organización con el mismo nickName de una existente que pertenece a una organización diferente, ¿verdad?
@Unique() public nickName!: string;Entonces, ¿la forma correcta de declarar esta restricción debería ser algo como esto?
@Entity() @Unique({ properties: ['nickName', 'organization'] }) export class OfficeLocation { @Property() @Unique() public nickName!: string; // all the other fields... @ManyToOne(() => Organization) public organization!: Organization; }¿Cuál es el propósito de tener la restricción única compuesta sobre dos campos, si sabe que uno de ellos es único por sí solo? En otras palabras, si su nickName ya es único, sabe que será único incluso si agrega cualquier otra columna a esa restricción. Tener ambos no tiene mucho sentido para mí. La restricción compuesta sobre el nick y la identificación de la organización por sí sola significaría que dos ubicaciones pueden tener el mismo nick.
Entonces, si desea tener apodos únicos, mantenga el nivel de propiedad uno. Si desea permitir duplicidades en el nivel de tabla, pero no permitir duplicidades dentro de una organización, debe mantener solo el índice compuesto y eliminar el nivel de propiedad uno.