Keeping track of people's relationships using a people relation table
It seems fine for me for generic cases. Later you might need some denormalization or caching if it's too slow but it really depends on the usage. (If you have any special requirement you should share it, edit the question, please.)

Four things to consider:


varchar(32) for name could be too small.
Consider unique indexes for the person_relation(parent_id, child_id, relation_id) triplet and the people_relation.relation attribute. For example:

Currently, you can insert the same relation twice:

mysql&gt; select * FROM person_relation;
Empty set (0.00 sec)

mysql&gt; INSERT INTO `person_relation` (`parent_id`, `child_id`, `relation_id`) 
    VALUES (1, 2, 1);
Query OK, 1 row affected (0.00 sec)

mysql&gt; INSERT INTO `person_relation` (`parent_id`, `child_id`, `relation_id`) 
    VALUES (1, 2, 1);
Query OK, 1 row affected (0.00 sec)

mysql&gt; select * FROM person_relation;
+----+-----------+----------+-------------+
| id | parent_id | child_id | relation_id |
+----+-----------+----------+-------------+
| 23 |         1 |        2 |           1 |
| 24 |         1 |        2 |           1 |
+----+-----------+----------+-------------+
2 rows in set (0.00 sec)


An unique index could prevent that: 

CREATE UNIQUE INDEX person_relation_uniq_idx 
    ON person_relation 
    (parent_id, child_id, relation_id);


For example:

mysql&gt; DELETE FROM person_relation;
Query OK, 2 rows affected (0.00 sec)

mysql&gt;         CREATE UNIQUE INDEX person_relation_uniq_idx 
    -&gt;             ON person_relation 
    -&gt;             (parent_id, child_id, relation_id);
Query OK, 0 rows affected (0.31 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql&gt; INSERT INTO `person_relation` (`parent_id`, `child_id`, `relation_id`) 
    VALUES (1, 2, 1);
Query OK, 1 row affected (0.00 sec)

mysql&gt; INSERT INTO `person_relation` (`parent_id`, `child_id`, `relation_id`) 
    VALUES (1, 2, 1);
ERROR 1062 (23000): Duplicate entry '1-2-1' for key 'person_relation_uniq_idx'

mysql&gt; SELECT * FROM person_relation;
+----+-----------+----------+-------------+
| id | parent_id | child_id | relation_id |
+----+-----------+----------+-------------+
| 25 |         1 |        2 |           1 |
+----+-----------+----------+-------------+
1 row in set (0.00 sec)

people_relation.relation might not be NULL.
people_relation and person_relation are easy to mix up, these names are too similar to each other. I'd rename people_relation to relation_type.