Basic schema design question

Tag.Text: string @index(hash) . #each tag needs a name
Tags: uid @reverse . #predicate for multiple tags
Tag: uid @reverse . #predicate for unique tag

ref: graphoverflow/app/client/src/queries/Tag.js at master · dgraph-io/graphoverflow · GitHub
So the tag node would be like:

{
  "data": {
    "allTags": [
      {
        "uid": "0x1",
        "Tag.text": "Dev",
        "~Tags": [{ "uid": "0xa"}, {"uid": "0xf4"} ], #relates to several
        "~Tag": [{ "uid": "0x23"}, {"uid": "0x155"} ] #relates to unique
      },
      {
        "uid": "0x2",
        "Tag.text": "Test",
        "~Tags": [{ "uid": "0xa551"}, {"uid": "0xd45"} ],
        "~Tag": [{ "uid": "0x223"}, {"uid": "0xf32"} ]
      }
    ]
  }

So I suppose:

"<Tags>" is for that “post” that has more than one tag.
"<Tag>" is for that “post” that has chosen to have a single tag.

In this case “Dev” relates to several non-unique posts via “Tags”.
And “Dev” relates to unique via “Tag”.

The tags “Dev” and “Test” are unique, only the relations via “Tag and tags” that are different.

This is because each tag needs a name, but they are unique, only their relationships are not.

PS. This project is incomplete, though.