【发布时间】:2023-04-10 20:42:03
【问题描述】:
我正在尝试为不同类型的事件创建一个数据库。每个事件都有任意的、用户创建的、不同类型的属性。例如“客人数量”、“要播放的特殊歌曲”、“小丑到达的时间”。并非每个事件都有一个小丑,但一个用户仍然可以与一个小丑进行不同的事件。我的基本概念是
propID | name | type
------ | ---- | -----
1 |#guest| number
2 |clown | time
和另一个表,每个事件都有一个唯一的 eventID。问题是一个简单的方法,比如
eventID | propID | value
------ | ------ | -----
1 | 1 | 20
1 | 2 | 10:00
由于数据类型不同,实际上并不能正常工作。
现在我想到了一些可能的解决方案,但我真的不知道哪个最好,或者是否有更好的解决方案?
1.
我将所有值存储为字符串并使用属性表中的数据类型。我认为这被称为 EAV,不被认为是好的做法。2.
只有有限数量的有意义的数据类型,这可能会导致这样的表:eventID | propID | stringVal | timeVal | numberVal
------ | ------ | --------- | ------- | --------
1 | 1 | null | null | 20
1 | 2 | null | 10:00 | null
3.
为多个表使用可能的数据类型,例如: propDateEvent propNumberEvent
-------------------------- --------------------------
eventID | propId | value eventID | propId | value
--------|--------|-------- --------|--------|--------
1 | 2 | 10:00 1 | 1 | 20
不知何故,我认为每个解决方案都有其起伏。 #1 感觉是最简单但最不健壮的。 #3似乎是最干净的解决方案,但如果我想添加例如非常复杂每个事件的属性的优先级。
【问题讨论】: