To explain this, I will simplify the table schema a bit.
Let's suppose we INSERT the following entries into the `entities` table:
```
INSERT INTO entities (type, attribute_key, attribute_value)
VALUES ('user', 'id', 'user1'),
       ('user', 'username', 'Foobar')
       ('comment', 'id', 'comment1'),
       ('comment', 'topic', 'My Comment Topic'),
       ('comment', 'author', 'user1');
```

In a traditional relational model where the tables `user => id, username` and `comment => id, author (user.id), topic` are given, we could JOIN ON user.id = comment.author. In this EAV approach, such an easy join is not possible.

Another problem with this approach is that it is not clearly documented what attributes (keys) an entity has. This makes apps that use the database more error prone, since they could query undefined data more often. The developer needs to spend more time investigating what attributes belong to an entity.
เพื่ออธิบายสิ่งนี้ ฉันจะลดความซับซ้อนของสคีมาของตารางลงเล็กน้อย สมมติว่าเราแทรกรายการต่อไปนี้ลงในตาราง `entities`: ``` INSERT INTO entities (type, คุณลักษณะ_คีย์, คุณลักษณะ_ค่า) VALUES ('user', 'id', 'user1'), ('user', 'username' , 'Foobar') ('ความคิดเห็น', 'id', 'comment1'), ('ความคิดเห็น', 'หัวข้อ', 'หัวข้อความคิดเห็นของฉัน'), ('ความคิดเห็น', 'ผู้เขียน', 'user1'); ``` ในแบบจำลองเชิงสัมพันธ์แบบดั้งเดิมซึ่งมีการกำหนดตาราง `user => id, ชื่อผู้ใช้` และ `comment => id, ผู้เขียน (user.id), หัวข้อ` เราสามารถเข้าร่วมได้ user.id = comment.author ในแนวทาง EAV นี้ ไม่สามารถเข้าร่วมได้ง่ายเช่นนี้ได้ ปัญหาอีกประการหนึ่งของแนวทางนี้คือไม่ได้ระบุไว้อย่างชัดเจนว่าเอนทิตีมีคุณลักษณะ (คีย์) ใดบ้าง ทำให้แอปที่ใช้ฐานข้อมูลมีแนวโน้มที่จะเกิดข้อผิดพลาดมากขึ้น เนื่องจากสามารถสืบค้นข้อมูลที่ไม่ได้กำหนดได้บ่อยขึ้น นักพัฒนาต้องใช้เวลามากขึ้นในการตรวจสอบว่าแอตทริบิวต์ใดเป็นของเอนทิตี
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence