Database 表中的引用
我有一个这样的表,其中包含添加到数据库中的项 目录表示例Database 表中的引用,database,Database,我有一个这样的表,其中包含添加到数据库中的项 目录表示例 id | element | catalog 0 | mazda | car 1 | penguin | animal 2 | zebra | animal 等等 然后我有一个表格,用户在其中选择表格中的项目,我保留了一个对所选内容的引用,如下所示 用户表示例 id | name | age | itemsSelected 0 | john | 18 | 2;3;7;9 所以我想说的是,如果ID为
id | element | catalog
0 | mazda | car
1 | penguin | animal
2 | zebra | animal
等等
然后我有一个表格,用户在其中选择表格中的项目,我保留了一个对所选内容的引用,如下所示
用户表示例
id | name | age | itemsSelected
0 | john | 18 | 2;3;7;9
所以我想说的是,如果ID为,我会保留一个对用户选择的字符串的引用,但我认为这似乎有点麻烦
因为当我查询一个用户的信息时,我得到的只是2的字符串;3.7.9
,当我真正想要的是一个和那个些ID对应的项目数组时
现在我得到了ID,我必须拆分字符串,然后运行另一个查询来查找ID对应的元素
如果我的问题可以理解的话,有没有更简单的方法呢?是的,有一种方法可以做到这一点。创建第三个表,其中包含a/B映射。它称为多对多外键关系 您有目录表
(int、varchar(MAX)、varchar(MAX))
或类似表格
您有自己的用户表(int、varchar(MAX)、varchar(MAX)、varchar(MAX))
或类似表,基本上是删除最后一列,然后创建另一个表:
创建一个usercatalog表:(int-UserId,int-catalogeid)
,两列上都有一个主键。然后,UserId列获取User.Id
的外键,catalogeid表获取catalog.Id
的外键。这将保留关系并简化查询。这还意味着,如果第22号目录.Id
不存在,则不能意外地将其作为两者之间的关系插入。这称为引用完整性。SQL Server要求,如果您说“此列必须引用此另一个表”,则SQL Server将要求该关系
创建此项后,为每个选中的项添加一个条目:即
UserId | CatalogueId
0 | 2
0 | 3
0 | 7
0 | 9
这也允许您在表上使用JOIN
s以实现更快的查询
此外,与问题无关,您还可以优化现有的目录
表,并为目录组
创建另一个表,其中包含您在那里的最后一列(目录
:汽车、动物)通过当前目录
表定义中的外键关系引用。这也将节省存储空间并加快SQL Server的工作速度,因为如果您只需要元素
值,它就不再需要读取字符串
列