我需要在一列中存储多个值。
例如,我正在创建保存用户首选项的表
e.g。
| user_id | cities | countries |
|---------|------------|------------|
| 1 | 10, 11, 23 | 21, 34 |
因为我不能将它们存储为数组(或者不喜欢存储为数组,即使它是可用的 - 由于维护和性能原因 - 以及更好的RDMS设计),我必须创建一个像这样的映射表
| user_id | type | reference_id |
|---------|---------|--------------|
| 1 | CITY | 10 |
| 1 | CITY | 11 |
| 1 | CITY | 23 |
| 1 | COUNTRY | 21 |
| 1 | COUNTRY | 34 |
此列中的参考ID指的是城市,国家等主表格
我看到的问题是
有没有更好的方法?
注意:
答案 0 :(得分:0)
您可以创建位置表{LocationId,locationType(city / country)} 然后,每次向城市或国家/地区表添加新记录时,首先将其添加到位置表,然后根据相应的cityId(或countryId)将其添加到城市(或国家/地区)表中,该位置与位置表中的LocationId相同。
然后在首选项表和位置表之间创建FK,并将城市和国家/地区表之间的[0或1] FK关系添加到位置表中。 (City和COuntry表格中的每个记录必须位于Location表中,但不能相反。
答案 1 :(得分:0)
你是说你想要一个通用数据表,而不是20个强制执行RI的查找表?在大型系统上,数据将存储在多个表中,而不是使用分隔符来分隔值,然后在另一个表中将它们爆炸出来,从而引入了强制执行RI的问题。如果您正在存储非常通用的值,例如代码/描述对,则只需要一个codeSetID字段来标识哪些代码属于哪些代码集。