我可以(理论上)使用集合(例如,阵列,列表)作为一个关系数据库模式的外键?

是可以使用一个集合,如多集或数组作为数据库中的计划外键?

背景:一个学生建议使用这样的结构(不使用连接表为N:M协会)来存储下列对象结构的数据库

public class Person { String name; List<Resource> res; … } public class Resource { int id; List<Person> prs; … }

SQL:2003

--------------解决方案-------------

恕我直言,学生不理解关系概念。 我不知道的集合类型是如何在今天的数据库实现的,但他们最有可能将它们存储在单独的表。

编辑如果这将是技术上是可行的,我怀疑这将是有益的。 考虑查询语言。 SQL是专为关系结构,我怀疑你真的可以有相同的灵活性和使用集合类型的可能性。 如果你有,你无法读取它了。 考虑指标。 等等等等。

关系结构是原始的,但非常强大的,快速的。 你可以这样做(几乎)一切与他们。 其实并不需要集合类型,虽然他们可能在某些情况下非常有用。 使用集合(对关系的东西)只是会比较复杂,越来越纯粹。

简单地说,我会说没有。 我不认为这有可能在SQL2003在任何情况下,将夫妇的代码和数据库结构过于紧密。 还记得结构代码很好的做法,这样一个改变你的数据库不需要更改你的代码,反之亦然。

正如斯特凡说你需要与外键链接到他们之间的索引资源与人不同的表。

因此,基于显示每个表都需要3 coloumns的类。

然后,您可以通过使用适当的查询数据库获取类的数据。

正如David指出,理论上允许属性值是一个集合类型。

然而,在你的情况,这仅仅是型号N:M的关系(我是对的),它根本不适用。

如果一个人P1的具有相关联的资源R1和R2,行此人会像{P1,{R 1,R 2}}。 如果该集合类型的列是一个外键引用一些其他的桌子,那岂不是必须有另一个表中的一行出现在一些列的收藏价值{R1,R2}。 哪个表会是这样在你的榜样?

如果您有需要处理的一起非空的空集合集合类型的属性是非常有用的。 没有关系携手在世界上会做它相当于为您服务。

原则上,是的,你可以实现这样的引用约束。 这是假设你的RDBMS允许一个合适类型的一组值。 例如,如果关系值属性(RVA)的支持它可能是一个关系值。

如果这是一个RVA那么约束可以很容易地表达了关系代数/微积分或同等学历。 例如,您可以在这样相对关系数据库支持的教程D语言做到这一点。 这样做在SQL中很可能会出现很多困难 - 但SQL是不是一个真正的关系语言。

当然,你可以关系方式做到这一点其实并不一定使它成为一个好主意......

分类:SQL 时间:2015-03-15 人气:1
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.385 (s). 10 q(s)