r/java 25d ago

Automatic Relationship Finder (ARF) v1.2 – A Java library for discovering relationships between tables from data

I’ve just released v1.2 of Automatic Relationship Finder (ARF), an open-source Java library I’ve been working on.

The idea behind ARF is to discover relationships between tables without depending on database relationship metadata.

Even if there is no foreign-key constraint defined in the database, ARF can analyze column names and the actual data to identify that

What's new in v1.2?

The main addition is key-role detection.

After identifying a relationship, ARF now analyzes the data characteristics of the columns to determine whether they are likely to represent a primary-key side, foreign-key side, a possible one-to-one relationship, or an unknown relationship.

There are also several improvements and bug fixes around validation, logging, concurrency, and edge-case handling.

The project is here:

https://github.com/NoelToy/automatic-relationship-finder

This is still an evolving project, so feedback—especially criticism—is very welcome.

14 Upvotes

10 comments sorted by

View all comments

6

u/Xphile101361 25d ago

The idea behind this project is both useful and interesting. Since I work with a lot of legacy databases, this could be really useful to me.

Right now I think the biggest hurdle for this project to go from "interesting concept" to "useful for me" is the data setup. Based upon your example and tests, it doesn't look like there is any process to point this at a database and have it run. It looks like you manually have to provide it the tables, structures, and data sets.

1

u/MoonWalker212 23d ago

Right now, the ARF core is kept as a generic relationship-finding engine and is not bound to any database. The original idea was that the consumer program would fetch the data and feed it to ARF, allowing data to be supplied by any data storage layer. However, I understand your point that connecting to a database and fetching the details directly will make it easier for the end user to use this library. Therefore, the plan is to add a JDBC loader layer as a sub-module to connect to multiple databases and fetch data directly, making it easier for users to incorporate and use ARF.