Hi Jay,
You are asking for advice, so here is mine :
Working with BaseX, you shall get rid of any entity/relationship model (or stick to java JPA plumbing), and focus on the documents or the messages your application will exchange.
Each document might be identified - either by path and/or an unique attribute or element, for cross references (maybe with xml:base attribute ?).
At first glance, one could think of the following document types :
- Artist or Band (auto referencing Artists)
- Album (including Songs)
- Tour
As I write, I just realize that your question could be all about the distinction between aggregation and reference relations in the object world (just think of the Eiffel expanded keyword).
Good designing !
Best regards,
Fabrice ETANCHAUD SPI Informatique
De : basex-talk-bounces@mailman.uni-konstanz.de [mailto:basex-talk-bounces@mailman.uni-konstanz.de] De la part de Jay Straw Envoyé : mercredi 29 mars 2017 03:16 À : basex-talk@mailman.uni-konstanz.de Objet : [basex-talk] Performance: associating one with many, or many with one?
Hi List!
I'm building an application in base-x that's sort of like a local music wiki: bands, members, venues, promoters, and albums and songs are some of what I'm representing in XML.
And what I'm wondering is that, in a situation where there's one of something (a musician), and a bunch of something else they're associated with (song writting or performance credits), which node should get the reference?
The numerous node gets the reference back to the one:
<album name="We Might Rock You" by="The Quesadillas"> <track number="1" name="Hot Cross Buns" written-by="Joe Schmoe" /> <track number="2" name="Bicycle" written-by="Joe Schmoe" /> </album> [ etc ]
Or the one refers to the many:
<person name="Joe Schmoe"> <songs-written> <song name="Hot Cross Buns" /> <song name="Bicycle" /> </songs-written> </person>
Example 1, I could use something like:
track[@written-by="Joe Schmoe"]
Example 2:
person[@name="Joe Schmoe"]/songs-written/song
My other thought was putting the references in both, but I'll have to do this with many types of objects I'm representing and I don't want things to get out of control (then again, if I go to export an <album/> or <band/> and I'm using the second method, I'll have to do a join)
I have a feeling in a large set, the second way wins out. Even where I live, with only around 750,000 people in our entire state (Alaska), we have easily 100 - 200 acts, including bands, solo performers, traditional acts, etc, with thousands of individuals that compose them. But I want bands that are extinct, bands that are on hiatus, etc, and I hope my software is useful to others in larger cities as well.
So, maybe a pointless question because my db will be so tiny compared to some folks who post on here, but just curious :-)
Also, if this problem has a name I can research myself, that'd be great!
Be well, Jay Straw