Es genial que se esté tomando el tiempo para comprender, clasificar y modelar los datos con los que está tratando ya que, desde mi experiencia personal, todo esto hace que todo el proceso de desarrollo sea más fácil y muy flexible para futuros cambios. Y estoy bastante seguro de que también ya lo sabe.
Modelo de datos preliminares y reglas comerciales asumidas
Definí una lista de reglas comerciales que asumí después de leer su pregunta y examinar detenidamente sus diagramas, para describir mi comprensión de sus especificaciones. Después de definir dicha lista, obtuve un modelo de datos IDEF1X [1] que decidí cargar como documento .PDF en una plataforma externa (Dropbox), ya que debido a su formato, este modelo de datos no encaja bien en una imagen incrustada. Estos dos instrumentos serán útiles como referencias para algunos puntos importantes que enumero a continuación en la sección titulada Aspectos a resolver para seguir avanzando .
Primero, aquí está el ...
Como es solo eso, preliminar, considérelo como un medio para ayudarnos a lograr el modelo de datos final deseado.
Reglas comerciales asumidas
Dicho modelo de datos preliminares se derivó de una colección de reglas comerciales (inferidas de su pregunta) que enumeraré de la siguiente manera:
Organizaciones y perfiles
Tenga en cuenta que Profile
actualmente se entiende como sinónimo de Person
.
- An
Organization
es amigo de uno a muchos Profiles
.
- An
Organization
es amigo de uno a muchos Organizations
.
- An
Organization
es miembro de uno a muchos Organizations
.
- A
Profile
es miembro de uno a muchosOrganizations
.
- A
Profile
es amigo de uno a muchos Profiles
.
- A
Profile
es miembro de uno a muchos Profiles
.
Ubicaciones y direcciones
- Un
Organization
posee uno a muchos Locations
.
- A
Location
se clasifica por uno a muchos LocationTypes
( solo uno en un momento dado).
- A
Location
puede tener uno-a-muchos Addresses
( uno Physical
, uno para Shipping
, uno para Billing
, o uno que sirve a todos dichos efectos, o uno que combina dos propósitos y otra que sirve solamente uno de ellos).
Un Address
puede ser mantenido por uno a muchos Profiles
o, dicho de otra manera, un Profile
mantiene uno a muchos Addresses
.
A específica Address
puede ser utilizado por uno-a-muchos Profiles
(que sirve como Physical
para uno Profile
, siendo utilizado para Billing
por una diferente , etc.). Entonces, un Address
funciona de manera similar para Locations
y Profiles
.
- Así, un individuo
Address
puede ser, al mismo tiempo , de tipo Physical
, Shipping
y Billing
.
Ubicaciones y roles
- A
Location
abre uno a muchos Roles
.
- A
Role
puede llevarse a cabo en uno a muchos Locations
.
- A
Profile
(una vez que se ha establecido como Member
de una Organization
) se puede llevar a cabo uno-a-muchos Roles
, en uno-a-muchos Locations
(pero sólo una específica Role
en cada uno Location
en un punto particular en el tiempo, es decir, nunca se dos o más Roles
al mismo tiempo )
Aspectos a resolver para seguir avanzando
Para seguir avanzando en la resolución de su modelo de datos, aquí hay una lista de puntos relevantes que, una vez que los resolvamos, nos ayudarán a alcanzar este objetivo:
Supuse que el término Profile
en su contexto tiene un significado similar (o el mismo) que el de Person
, pero podría ser un poco diferente. De esta manera, ¿diría que, en su escenario, las entidades Organization
y los Person
subtipos son Profile
?
¿Puede un Profile
(o Person
) ser propietario de uno a muchos EmailAddresses
, o un Profile
(o Person
) está fijado exactamente a uno EmailAddress
?
¿Le gustaría brindar la posibilidad de Organization
que se contacte a través de Telephone
y Email
, o desea restringirlo para que solo sea posible para un Profile
(o Person
)?
Supongo que a Location
se fija exactamente a uno Address
del tipo Physical
, ¿es esto correcto?
¿Es posible que uno Location
sea compartido por uno a muchos diferentes Organizations
o , de lo contrario, solo Location
puede ser propiedad de uno Organization
?
Usted ha declarado a través de comentarios que el hecho de ser Member
ay Friend
es lo mismo. Como puede ver en mi modelo de datos preliminares propuesto, le seguí las especificaciones originales y describí todas las combinaciones posibles de membresía y amistad entre Organization
y Profile
(o Person
) en diferentes entidades, ya que creo que puede ser útil en el esfuerzo de definir lo mejor posible estructura para esa parte de su escenario. En este sentido:
- Supongo que la declaración
an Organization is a Member of another Organization
tiene diferentes efectos que la declaración sobre a Profile (or Person) is a Member of an Organization
la entidad llamada Location
.
- Como puede ver en el modelo de datos, creo que el
Role
de Owner
solo es válido para un Organization
y, para mí, el válido Roles
para un Profile
(o Person
), dentro de un Location
are Admin
y Member
. Que piensas sobre todo esto? Dado que está en contacto directo con las reglas comerciales que se aplican a su situación, debe decirme si mis suposiciones son correctas.
¿Puede un Profile
(o Person
) jugar diferente Roles
dentro del mismo Location
? es decir, ¿puede un Person
ser, al mismo tiempo, el Admin
y también un Member
de lo mismo Location
? ¿Cuáles son las reglas al respecto?
Creo que lo mismo Profile
(o Person
) puede jugar diferente Roles
en diferente Locations
. Por ejemplo: Un Profile
(o Person
) específico es el "Administrador" en Location
"1", y este mismo Profile
(o Person
) es un " Member
" en Location
"2", al mismo tiempo. Estoy en lo cierto?
¿Es posible que un particular Location
tenga diferentes LocationTypes
al mismo tiempo, o es un individuo Location
fijo para mantener exactamente uno LocationType
?
¿El atributo Organization.Website
representa la dirección del sitio web de una organización en particular, como “dba.stackexchange.com”?
Si Profile
"1" (entendido como Person
) es un Member
(o Friend
) de Profile
"2", ¿es posible que Profile
"1" lleve a cabo Role
una Location
propiedad de Profile
"2"? Considero que tales escenarios solo son válidos para las relaciones entre an Organization
y a Member
Person
, entonces, ¿qué opinas?
De manera similar, si Organization
"1" es un Member
(o Friend
) de Organization
"2", ¿es posible que Organization
"1" lleve a cabo Role
una Location
propiedad de Organization
"2"? Nuevamente, creo que este tipo de escenarios solo son válidos para las relaciones entre an Organization
y a Member
Person
, ¿es esto correcto?
En este sentido, mientras escribo estas preguntas, creo que sería razonable decir que solo hay tres tipos diferentes de relaciones que involucran Organizations
y Persons
, y podemos definir:
- (a) La relación entre an
Organization
y a Person
como " Membership
".
- (b) La relación entre ay
Person
otro diferente Person
como " Friendhip
".
- (c) Todavía tenemos que encontrar un nombre significativo para describir la relación entre un individuo
Organization
y otro diferente Organization
.
- Entonces, hágame saber lo que piensa sobre (a), (b) y (c).
¿Es posible que un Organization
sea un Friend
(o un Member
) de uno a muchos diferentes Organizations
al mismo tiempo? O solo es posible que una persona Organization
tenga solo una relación exclusiva con otraOrganization?
Modelo de datos sucesivo que representa el primer avance
En atención a sus respuestas y resoluciones a los aspectos pendientes que he enumerado anteriormente, he creado lo siguiente ...
Aunque todavía no me siento del todo cómodo, este nuevo modelo de datos expresa las siguientes reglas de negocio:
- A
Profile
es o bien una Organization
o un Person
. [2]
- A
Profile
puede ser el amigo que ofrece uno a muchos FriendProfiles
, y un Profile
puede ser el amigo que acepta uno a muchos FriendProfiles
. [3]
- A
Location
puede consistir en uno a muchos Locations
. [4]
Respuestas a sus comentarios específicos posteriores
Es realmente interesante para mí notar / agravar la separación de las preocupaciones [por ejemplo, LocationAddress y ProfileAddress], porque obviamente quería apresurarme y mantenerlas sin las relaciones correctas [curiosamente, no me sentí bien con mi ERD original].
Sí, esa es una buena comparación, aunque no lo llamaría separación de preocupaciones (que es, sin duda, un principio fundamental en la programación y diseño de aplicaciones), ya que este término comúnmente se refiere a la etapa de desarrollo de aplicaciones y actualmente nos encontramos en el etapa de entender los datos y diseñar su estructura lógica.
Desde mi experiencia personal, considero que esta fase tiene que ver con poner las cosas significativas en todo su contexto, tiene que ver con ver las asociaciones que existen entre las diferentes entidades que son relevantes en el escenario particular de interés, y luego representando estas cosas en un modelo de datos. En el caso específico sobre el que está comentando, la Address
entidad puede tener diferentes tipos de conexiones con otras entidades, una con Profile
y otra diferente con Location
.
Y sí, cuando algo no se siente bien o natural , bien puede ser una señal de que uno debe esforzarse más para comprender los datos pertinentes. De esta manera, la Address
entidad es una de las cosas que considero que necesita más atención, ya que creo que la relación entre a Profile
y an Address
podría manejarse por medio de la Location
entidad (debido al hecho de que cada uno Location
debe tener al menos un físico Address
), por lo tanto, podríamos descartar la ProfileAddress
entidad asociativa representada en el último modelo, pero debe continuar analizando estos puntos y hacerme saber sus ideas.
Además, ¿es una práctica común en IDEF1X cambiar las denominaciones PK / FK en las entidades para una mejor legibilidad [por ejemplo, ProfileId - LocationOwnerProfileId]?
Sí, esa es una observación muy inteligente de su parte, ya que IDEF1X recomienda el uso de nombres de roles para denominar CLAVES EXTRANJERAS, a fin de capturar el significado de dichos atributos de acuerdo con la entidad en la que se está utilizando. También vale la pena señalar que esto también está fuertemente relacionado con el concepto de migración de claves primarias . De hecho, el uso de nombres de roles precede a IDEF1X, ya que fue presentado originalmente por el Dr. EF Codd en su texto seminal de 1970. De esta manera, se puede ver claramente la fidelidad que el estándar IDEF1X mantiene hacia el modelo relacional .
Me intrigaría saber qué no le gusta particularmente / siente que no modela, con / en la solución.
Además de los detalles ya descritos anteriormente sobre la Address
entidad, no estoy seguro de si los Roles
realizados por un determinado Profile
en un particular Location
son equivalentes para un Organization
o un Person
. Desde mi punto de vista, un Person
primero debe asociarse con un Organization
, y luego esto Organization
nombraría a dicho Person
para realizar un Role
en particular Location
, pero usted conoce mejor el escenario, por lo que estas reglas pueden ser innecesarias. En este sentido, voy a insistir sobre el hecho de que sería muy útil para mí saber la descripción contextual o significado de que los futuros usuarios de esta estructura de datos para dar Organization
, Profile
yLocation
, pero entiendo que esto puede considerarse información confidencial, por lo que sería una limitación.
Con la estructura actual, parece que todos ( Organization
o Person
) pueden estar relacionados con cualquier persona (de nuevo, Organization
o Person
) y pueden / hacer cualquier cosa ( Role
) en cualquier lugar ( Location
) pero, perharps, esto es exactamente lo que usted y los usuarios esperan de esta base de datos , para lo cual proporcionará restricciones bien definidas, por supuesto. Si este es el caso, casi estamos proporcionando una solución final. Dado que, naturalmente, su opinión es decisiva en esta situación, también debe analizar estas ideas y luego informarme sus conclusiones para que podamos dar los pasos finales.
Segundo avance factible
Desafortunadamente, la comunicación se detuvo hace unas semanas, supongo que debido a los compromisos laborales que debe cumplir, lo cual es completamente razonable. Hubiera estado mucho más contento si hubiéramos desarrollado un modelo más estable y robusto, pero, debido a nuestras interacciones anteriores, puedo suponer que he podido orientarlo en la dirección correcta.
Además de lo que ya se ha presentado en este proceso de preguntas y respuestas, considero que proporcionar una nueva progresión de los modelos de datos anteriores puede ser útil para otros buscadores con un problema similar. Entonces, he creado el ...
Modelo de datos preliminares de organizaciones y perfiles: segundo avance
Como se puede ver en dicho modelo de datos, he eliminado la relación de muchos a muchos que he representado en los modelos anteriores entre Profile
y Address
, dado que un hecho Profile
ya está relacionado con uno a muchos a Addresses
través de su propiedad Locations
.
Otro cambio que se ilustra en este nuevo avance es el hecho de que ahora incluye la posibilidad de que un dado Location
pueda ser propiedad de uno a muchos Profiles
. En consecuencia, he cambiado la Location
CLAVE PRIMARIA (descartando el LocationOwnerProfileId
atributo) y luego agregué una entidad asociativa ( muchas a muchas ) que se relaciona Profile
con Location
.
Notas
1. IDEF1X es una técnica de modelado de datos altamente recomendable que fue definida como un estándar en diciembre de 1993 por el Instituto Nacional de Estándares y Tecnología ( NIST ) de EE. UU .
2. Esta es una ocurrencia de un (super) grupo de subtipo de tipo . En caso de que le interese, aquí hay una respuesta en la que trato de manera más detallada este tipo de relaciones.
3. Un ejemplo de una relación jerárquica de muchos a muchos , y es muy similar a la estructura que dio una solución definitiva al "Problema de Explotación de Partes" . Tal solución fue, por supuesto, presentada por el Dr. Edgar Frank Codd en su artículo de 1970, enormemente influyente, "Un modelo relacional de datos para grandes bancos de datos compartidos" .
4. Como tal, esta es una instancia de una relación jerárquica de uno a muchos (o de muchos a uno) .