Relación entre ASPNET Tablas proveedor de pertenencia y las tablas de suscripciones personalizado
-
11-09-2019 - |
Pregunta
Fui a través de un ejemplo de proveedor de perfil personalizado hace un tiempo y estoy ahora de volver a ellos.
Mi base de datos cuenta con mesas de todo el dbo.aspnet_ * creadas cuando me encontré con el registro Red PEA mago. En estas tablas tengo aspnet_Profile que tiene una restricción FK señalando aspnet_Users.
También tiene dos tablas en MyDB: La primera, dbo.ProfileData, tiene una restricción de clave externa señalando dbo.Profile.
Lo que quiero es entender cómo las tablas se refieren a MyDB los de dbo.aspnet_ *. ¿No debería haber una restricción de clave externa (o algún tipo de relación) entre las tablas de perfiles en MyDB y las tablas de la Red PEA? algunos discusión de cómo mis tablas personalizadas corresponden a las entregadas por la Red del PEA sería maravilloso.
Gracias de antemano.
Solución
Hay dos opciones que puedo ver, ambos de los cuales producirán básicamente el mismo resultado:
-
FK desde
dbo.aspnet_User.UserID
adbo.Profile.UserID
, a continuación, definir una clave única endbo.Profile.UserID
(a menos que usted lo usa como columna de PK paradbo.Profile
) -
FK desde
dbo.aspnet_Profile.ProfileID
adbo.Profile.ProfileID
dbo.aspnet_User
es lógicamente 1 - 1 con dbo.aspnet_Profile
, por lo que en realidad no importa qué enfoque se utiliza como usted seguirá recibiendo la misma integridad relacional.
Si va a sustituir la tabla de datos de perfil estándar con su propia aplicación, entonces tiene más sentido usar la primera sugerencia, de lo contrario si está extendiendo el perfil de esquema a continuación, utilizar la segunda sugerencia.
Editar
aspnet_Profile
es la tabla estándar - la SqlProfileProvider
estándar almacena los datos del perfil del usuario como una bolsa de propiedades serializado en aspnet_Profile
, por lo tanto, ¿por qué no hay una mesa aspnet_ProfileData
separada.
Este enfoque permite que el esquema de perfil para personalizar fácilmente para diferentes aplicaciones sin necesidad de ningún cambio en la base de datos subyacente, y es la solución más óptima para un marco como .NET. El inconveniente es que SQL Server no tiene fácil acceso a estos datos en absoluto, por lo que es mucho más difícil de índice, actualizar y consultar los datos del perfil del usuario utilizando T-SQL y lógica basada en conjunto.
El enfoque más común que he visto para eliminar esta limitación es extender el SqlProfileProvider
estándar para escribir en una tabla de datos de perfil personalizado que tiene columnas específicas para las propiedades de perfil de aplicación específica. Esta tabla naturalmente tiene una relación de 1-1 con la tabla aspnet_Profile, así que tiene una clave externa tal como se indica anteriormente.
El papel del proveedor extendida es promover las propiedades de perfil específicos a las columnas durante el perfil escribe y lee en las columnas cuando se recupere el perfil.
Esto le permite mezclar y combinar las soluciones de almacenamiento en una base como en las necesidades, siempre y cuando su proveedor extendida sabe cómo caer de nuevo a la implementación estándar en el que no 'sabe' acerca de una propiedad determinada.
Siempre pienso que lo mejor es dejar las tablas de miembros estándar tal y como son, y ampliar cuando sea necesario el uso de nuevas tablas con claves externas apropiadas, a continuación, subclase el proveedor adecuado y anular los métodos proveedor con su propia aplicación (llamada en la base aplicación siempre que sea posible).