如何在数据库中定义具有多个值在另一个表中引用的列?

Mah*_*eep 4 sql database database-design

我在一个网站上工作,一些功能类似于Stackoverflow.

其中之一是它有一个类型的多个项目(在SO假设,多个问题).

每个项目与另一个类型(City)的多个值相关.(在SO中假设每个queston与多个标签相关.标签是表格中的条目,例如标签).

因此我的表是:

Cities(Id, Name, IsAcive)
MyItems(Id, DisplayText, AciveInCities)
Run Code Online (Sandbox Code Playgroud)

这里有一个myitems条目可以在多个城市中激活.

我的问题是如何AciveInCities在数据库中定义列.逗号分隔的CityIds或逗号分隔的城市名称或某些位于不同表中的位置?

这是一个Web应用程序,我希望用户能够按城市搜索MyItems.因此,在同一个表中保存cityname/id可能很快.

这三种方法中的任何一种都有问题吗?

如果这是重复的问题,请重定向我更正,我找不到一个.

谢谢

Ode*_*ded 7

您不应该在数据库中拥有多值列 - 它不是规范化的.

有一个多对多表CityIdItemId列作为外键,它们是一个复合主键.

Cities(Id, Name, IsAcive)
MyItems(Id, DisplayText)
ItemsActiveInCities(CityId, ItemId)
Run Code Online (Sandbox Code Playgroud)

  • @Maheep - 你有误解.将它们放在一个字段中将是_slower_,因为您需要解析它,订购它并仍然加入结果.将它放在单独的表中是正确的关系设计.谈到速度 - 你需要测量和找到瓶颈,而不是猜测它们可能发生的位置. (4认同)