我想知道如果你有一个包含十几种不同类型列表(商店、餐厅、俱乐部、酒店、活动)并需要不同字段的网站,是否创建表格定义如下的列会有好处?
例如:商店
shop_id | name | X | Y | city | district | area | metro | station | address | phone | email | website | opening_hours
或者采用更抽象的方法,类似于这样:
object_id | name
---------------
1 | Messy Joe's
2 | Bate's Motel
type_id | name
---------------
1 | hotel
2 | restaurant
object_id | type_id
---------------
1 | 2
2 | 1
field_id | name | field_type
---------------
1 | address | text
2 | opening_hours | date
3 | speciality | text
type_id | field_id
---------------
1 | 1
1 | 2
2 | 1
2 | 3
object_id | field_id | value
1 | 1 | 1st street....
1 | 3 | English Cuisine
当然,如果值是预定义的(例如:特长可以拥有自己的列表),它可以更加抽象。
如果我采用抽象的方法,它可以更加灵活,但查询将会更加复杂,需要进行大量的连接操作。但我不知道这是否会影响性能,执行这些“更复杂”的查询。
我很想知道两种方法的优缺点是什么。我可以自己想象,但我没有经验来证实这一点。