我正在嘗試爲不同類型的事件創建數據庫。每個事件都有任意的,用戶創建的不同類型的屬性。例如「客人數量」,「特殊歌曲播放」,「小丑到達時間」。並不是每個活動都有一個小丑,但一個用戶仍然可以與一個小丑舉辦不同的活動。我的基本概念是與不同數據類型的多對多關係
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