Sometimes, however, it’s helpful for a content object to have a relationship with another object. We need to create a link between the two at the attribute level.
This is the opposite of discrete content modeling – this is relational content modeling – the modeling of relationships between content objects.
Say you have an Article type which stores some information about the author – there are attributes for Author First Name, Author Last Name, and Author Email.
You start to realize, however, you’re duplicating a lot of information. Bob has written 300 articles, and his information is embedded on all of them, and he just changed his email address.
Additionally, let’s say you’d like Bob to have his own page, where you can display some extra information about him and provide a list of his articles. However, Bob isn’t an actual content object. Remember, Bob’s representation in content only exists as a handful of attributes, duplicated on hundreds of other objects.
What you need to do is create a content object to represent Bob, then somehow link all those 300 articles to that single object in such a way that Bob’s object knows about all 300 articles, and all 300 articles know about Bob’s object.
You need to create a new type for Author. You can create attributes like First Name, Last Name, and Email. In doing this, you can create a content object for Bob (and for every other author), and give him his own page.
Then, you need to link Bob and his articles together. Ideally, we can do this with a referential attribute, which is an attribute value that doesn’t hold any actual data, but is just a reference to another object. The Author attribute on Article now links over to Bob’s Author object. When you’re rendering our Article, you just display Bob’s name and email from whatever is on the linked Author object at that moment.