In a relational database, foreign keys are normally used to associate records stored in different tables, but wouldn’t it be nice to define relationships dynamically without having to add extra columns or tables? And while we’re at it, how about having sparse relationships by associating a record directly with any other record like “post X was last edited by user #123” or “post X was flagged for review by user #456” (who happens to be a moderator)?

    • @[email protected]OP
      link
      fedilink
      37 months ago

      Yes, that’s correct. Here’s how an entry in the join table looks like:

      {
        "id": 6,
        "sourceComp": "user",
        "sourceId": 2,
        "targetComp": "post",
        "targetId": 3,
        "type": "author",
        "createdAt": "2024-03-28T13:28:59.175Z",
        "updatedAt": "2024-03-28T13:28:59.175Z"
      }
      
      • @[email protected]
        link
        fedilink
        6
        edit-2
        7 months ago

        Fine for prototyping, but adds a scaling tech debt “time bomb” for a live system. Those associations had better be really sparse.

        • @[email protected]OP
          link
          fedilink
          27 months ago

          There’s certainly the danger of creating too many ad-hoc or sparse relationships, which can cause issues. That said, when used for supplementing foreign keys, Tie-in can be a useful tool in a production system as well.

        • @mvirts
          link
          27 months ago

          i was thinking the same thing

        • @[email protected]OP
          link
          fedilink
          2
          edit-2
          7 months ago

          That idea crossed my mind too, but you can’t really use the full capabilities of SQL in graph databases, and that’s a deal breaker for me.

  • @solrize
    link
    67 months ago

    NoSQL has been a thing since before there was SQL.

    • @[email protected]OP
      link
      fedilink
      37 months ago

      AFAIK, no NoSQL database fully supports SQL, and only some offer support for transactions and joins. The idea here is to augment a relational database by adding capabilities for dynamic relationships.