Oops, one more. There was also a Users table (Id, Username, ...)
I didn't see a way to handle join from Races to Users based on SupervisorId and AnalystId. On Monday, 29 February 2016 15:52:48 UTC+11, Oliver George wrote: > > Thanks for the details. > > I did a little experimenting and it works as advertised. Notes below show > what I did and found. > > I was interested to see if this might be suitable as a simple om.next > remote for a relational database. Potentially fanciful but it's a topic of > interest for me at the moment. > > I used an existing database so I had a semi interesting dataset to play > with. > > Races (Id, RaceNumber, RaceTime, MeetingId, SupervisorId, AnalystId...) > Meetings (Id, MeetingDate, MeetingTypeId, VenueId, JurisdictionId, ...) > Venues (Id, Name) > Jurisdiction (Id, Name, Code) > > > The table and foreign key naming conventions didn't match so I created > views for each table. If that was configurable then you'd open yourself to > a wider audience. (e.g. MeetingId vs meetings_id) > > It was easy to setup some associations > > (def associations > {:meeting {:race :has-many > :jurisdiction :belongs-to > :venue :belongs-to} > :race {:meeting :belongs-to > :jurisdiction [:through :meeting :belongs-to]} > :venue {}}) > > My queries all worked as expected. > > (find-one db-state :meeting #{:race} [[:= :meeting.id 5617]]) > (find-one db-state :meeting #{:venue} [[:= :meeting.id 5617]]) > (find-one db-state :race #{:meeting :jurisdiction} [[:= :race.id 42792]]) > > I couldn't see how I might pull data which requires three levels of > information (e.g. race -> meeting -> venue). I didn't dig deep enough to > be sure. > > Incidentally, in case you haven't come across the datomic pull inspired > om.next remote pull syntax this is what it might look like: > > [{:meeting [:race]}] > (find-one db-state :meeting #{:race} []) > > [({:meeting [:race]} [:= :meeting.id 5617])] > (find-one db-state :meeting #{:race} [[:= :meeting.id 5617]]) > > [{:meeting [:venue]}] > (find-one db-state :meeting #{:venue} [[:= :meeting.id 5617]]) > > [{:race [{:meeting [{:venue :jurisdiction}]}]}] > > Not prettier necessarily but allows for composing multiple queries into a > request and for drilling deeper into available data. > > cheers, Oliver > > > > > > > > On Sunday, 28 February 2016 20:02:15 UTC+11, Krzysiek Herod wrote: >> >> Thanks Oliver for the feedback, >> >> actually I came up with the idea of relational_mapper while working on a >> project in which I had one "data-model" that contained all the database >> related information, but the database related code contained a lot of >> features, and I really like working with small, focused clojure libraries, >> so in the end relational_mapper is as small as I could think of it. >> >> Also as you can see in this commit: >> https://github.com/netizer/relational_mapper/commit/6b4d79f92570bf723e4092d329978d484c01d2ab#diff-2b44df73d826687086fd1972295f8bd0L8 >> >> I actually was storing both: relations and fields in the same structure, >> but I changed that because I needed "fields" only for migrations that I >> used in tests, and because the whole structure was unnecessarily complex >> (it was much easier to make mistake modifying the fields/associations >> structure). >> >> Relational Mapper is meant only for reading data because whenever I tried >> to use complex structures to write data, I was unhappy with the result >> (often you have to update indexes of related records after one of them - >> with auto-increment field - is created, and there is a problem of >> determining if the related record has to be created or updated). >> >> I didn't write compare/contrast points because I couldn't find similar >> libraries in clojure. I mentioned ActiveRecord in README mostly because of >> the wording in types of relations, but even ActiveRecord is very far from >> Relational Mapper (it's much bigger, and has features that go way beyond >> simple relational mapping). >> >> Thanks again, >> Krzysiek >> >> On Sunday, February 28, 2016 at 10:54:57 AM UTC+8, Oliver George wrote: >>> >>> >>> Seems pretty nice to me. Like a light weight version of the Django's >>> migrate and queryset features which build on model definitions. >>> >>> It seems like this would allow me to define a database schema (tables, >>> relations and fields) as data and use it to both create the database and >>> run select/insert/update/delete queries against it. >>> >>> Is that your intention for the library? >>> >>> I've not explored the options in this space before. It might be good to >>> have a section in the README pointing out to other related tools with some >>> compare/contrast points. >>> >>> Thanks. >>> >>> >>> On Friday, 26 February 2016 17:51:10 UTC+11, Krzysiek Herod wrote: >>>> >>>> I created Relational Mapper, for situations where there is a relational >>>> database with certain amount of relations between tables and it's just not >>>> cool to fetch data from each table separately nor to write custom code for >>>> each such project so, with this library, you can just call: >>>> >>>> (find_all db-state :posts #{:authors :attachments} [:= post.id 1]) >>>> >>>> and assuming you have appropriate relations between these tables, you'll >>>> get: >>>> >>>> {:posts {:title "Christmas" >>>> :body "Merry Christmas!" >>>> :id 1 >>>> :authors_id 10 >>>> :authors {:name "Rudolf" :id 10} >>>> :attachments [{:name "rudolf.png" :id 100 :posts_id 1} >>>> {:name "santa.png" :id 101 :posts_id 1}] >>>> >>>> >>>> The code is here: https://github.com/netizer/relational_mapper >>>> >>>> Please, guys, let me know what do you think, and if you have any ideas >>>> about improvements. If somebody would be so kind to take a look at the >>>> code, it would be awesome to read some feedback. >>>> >>>> Krzysiek HerĂ³d >>>> >>> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.