A typical key/value table does not consist of only two columns.
+-----+-----------------+-------------------+
| KEY | WHAT | VALUE |
+-----+-----------------+-------------------+
| 1 | POST_CONTENT | I am Superman. |
| 1 | POST_DATE | 2020-12-01 |
| 1 | POST_POSTER | Mr. X |
| 2 | POST_CONTENT | I am tired. |
| 2 | POST_DATE | 2020-12-05 |
| 2 | POST_POSTER | Mr. X |
| 22 | COMMENT_POST_ID | 1 |
| 22 | COMMENT_CONTENT | This is not true. |
| 22 | COMMENT_POSTER | Mr. Doubtful |
| 22 | COMMENT_DATE | 2020-12-17 |
| 23 | COMMENT_POST_ID | 1 |
| 23 | COMMENT_CONTENT | Wow! |
| 23 | COMMENT_POSTER | Lois Lane |
| 23 | COMMENT_DATE | 2020-12-21 |
| 24 | COMMENT_POST_ID | 2 |
| 24 | COMMENT_CONTENT | Sleep well! |
| 24 | COMMENT_POSTER | The Sandman |
| 24 | COMMENT_DATE | 2020-12-21 |
+-----+-----------------+-------------------+
You can even make this four columns, i.e. split what = POST_CONTENT into entity = POST and attribute = CONTENT, which makes this more readable and maybe easier to access. I would do this. You could even call the two columns table and column, because this is what they represent after all :-)
Anyway, key/value tables are a nuisance to work with. It may be a good practice, but you would avoid them whenever possible in real live.
If you used tables with proper columns in an RDBMS, you'd have it guaranteed that the dates contain dates (and not, say, '2020-02-30' or even 'Some day last year'), that a comment must refer to a post and can only refer to an existing post ID and that each post and comment does have a content, data, and poster. With a key/value table none of these can be guaranteed by the DBMS.
In a NoSQL DBMS on the other hand, a post would typically be stored completely with all its data and list of comments. No separate tables, no separate columns, but rather a table of post sheets.
searchorsearch_nearbasically jump the cursor to a position that will help you "scan" only the relevant keys. Just like with SQL, full table scan are not good. - amirouche