我正在尝试为不同类型的事件创建数据库。每个事件都有任意的,用户创建的不同类型的属性。例如“客人数量”,“特殊歌曲播放”,“小丑到达时间”。并不是每个活动都有一个小丑,但一个用户仍然可以与一个小丑举办不同的活动。我的基本概念是与不同数据类型的多对多关系
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似乎是最干净的解决方案,但如果我想添加例如每个事件的属性优先级。
看看[this](https://stackoverflow.com/questions/4481672/is-eav-hybrid-a-bad-database-design-choice)和[this](http:// sqlblog。 COM /博客/ aaron_bertrand /存档/ 2009/11/19 /什么,是那么坏有关,EAV-anyway.aspx)。因为它的灵活性,Imho,第一种情况会更好,如果你没有有限类型的数据类型的话。 – kzharas210