У меня есть база данных с несколькими арендаторами со строгим и критичным разделением данных между клиентами. Прежде чем приступить к производству, я хотел бы знать, имеет ли смысл мой подход или может привести к проблемам в будущем (безопасность/производительность/обслуживание). Ниже 2 модели типичный сценарий:Как обращаться с ClientId в базе данных с несколькими арендаторами
public class Car
{
[Key, Column(Order=0)]
public int carId {get;set;}
[Key, Column(Order=1)]
public int clientId {get;set;}
...
public virtual ICollection<Component> components {get;set;}
}
public class Component
{
[Key, Column(Order=0)]
public int componentId {get;set;}
[Key, Column(Order=1)]
public int clientId {get;set;}
...
[ForeignKey("carId, clientId")]
public Car car {get;set;}
public int carId {get;set}
}
Таким образом, каждая модель имеет ClientId как первичный ключ, заставляя его использовать с .find(), заставляя его в Join-таблицы для многих многих отношений , Это означает, что существует довольно много избыточности, и clientId используется, когда запрос действительно достаточно безопасен для разделения данных.
Имеет ли смысл принуждать клиента к чему-либо, или может быть лучше сохранить его только на родительских моделях?
clientId как первичный ключ? или его внешний ключ? –
В приведенном выше коде clientId формирует составной ключ вместе с фактическим свойством id. Но это то, с чем я борюсь. Включите его в составную PK и заставьте его в запросах в качестве дополнительной «проверки» или сохраните ее и используйте только на родительских моделях. Особенно безопасность - это проблема. Я не вижу последствий в будущем, потому что у меня нет опыта. –
Почему бы не использовать арендатора по схеме? –