我们都在那里 - 考虑以下示例 - 首先,客户说“每个用户只有一张个人资料图片”,所以我们在用户表中添加一个字段 - 半年后,需求发生变化,用户实际上需要有n张个人资料图片。
现在,只有添加一个新的表(如user_pictures)来处理新的基数1:n而不是1:1时,这似乎才有可能。通常这会变得非常复杂。每当我遇到这个问题时,我想知道为什么我们不使用我们可以想到的所有三个维度。二维表的局限性有点不完整 - 如果,指的是我们的问题与个人资料图片再次,users表中的图片字段具有深度,并且该深度使该字段成为同时完美地表示基数1:1和1:n的数组。
表字段将简单地成为数组并自动支持两个基数 - 这不是什么?至少我会用它。那里有类似的东西吗?
答案 0 :(得分:8)
Oracle支持arrays以及nested tables。似乎符合您的要求。这些天虽然人们更喜欢将所有内容建模为表格和关系,以保持简单和一致,因此现代RDBMS一般不支持这些内容,我也不相信它曾经成为标准SQL。
答案 1 :(得分:5)
标准的多对多方法,许多用户对很多个人资料图片,很容易被三种表格方法所涵盖:
表:用户
表:图片
表:User_Pictures
但是,如果您转向NoSQL方法,则可以存储用户文档(通常为JSON格式),该文档在单个表中存储该用户的个人资料图片数组。
@gordy为Oracle链接+1。我不确定是否有任何RDBS假设数组。
答案 2 :(得分:3)
您正在描述非规范化技术(一个字段的实例有多个列),除非您彻底了解违反基本关系原则的后果,否则通常会导致撕裂。
当您想要在字段上查询(“查找具有此图片的用户”)并且您发现具有“AND图片IN(pic1,pic2,pic3)”的SQL语句不能是索引并且您的优化器开始计划报复。