如何在单个SQL表属性中存储多个实体实例
我有这些SQL表如何在单个SQL表属性中存储多个实体实例,sql,Sql,我有这些SQL表 日期(d_id,blabla,产品1,产品2) 产品1(p1\u id) 产品2(p2\u id) 我想保存一行Date,一个Product\u 1和一个Product\u 2 “简单”的方法是创建另外两个表 Date\u P1(d\u id,p\u id) Date\u P2(d\u id,p\u id) 比如说 Date_P1: {(d1,p01), (d1,p02), (d1,p04), (d2,p01), (d2,p03), (d3,p02)} etc. 但我
(d_id,blabla,产品1,产品2)日期
(p1\u id)产品1
(p2\u id)产品2
Date
,一个Product\u 1
和一个Product\u 2
“简单”的方法是创建另外两个表
(d\u id,p\u id)Date\u P1
(d\u id,p\u id)Date\u P2
Date_P1: {(d1,p01), (d1,p02), (d1,p04), (d2,p01), (d2,p03), (d3,p02)} etc.
但我不认为这是我能做的最好的方式
这是否可以将某种数组保存为“日期”属性
*(包含product_1 ID和product_2 ID的数组)*如果您希望在数据库中建立多对一(或多对多)关系,那么最好的方法确实是使用表Date、Product1和Date_P1
另一个想法是以字符串的形式存储“产品ID列表”,例如
Date:{(d1,p01;p02;p03”)…}
。这样做的问题是,有些查询可能很难有效地执行,因此不建议使用这个好吧,我第一次看到的是,您有一个名为date的表?我将首先集中精力解决该问题。例如,名称如下:P在实表中,我必须存储4个以上的属性。在SQL或任何关系DBMS中,保存数组是你永远不想做的第一件事。这就是为什么它是数据规范化的第一条规则。@RBarryYoung:如果您的属性确实是“本机”数组,那么它不会违反1NF。引用C.J.Date的书《关系数据库词典》:“该表中的每一行和每一列交叉点都只包含一个适用类型的值,不多也不少。(所讨论的值可以是任意复杂的,甚至可以是一个表”.但我同意,事实上很少有这种情况,而且这绝对不是其中之一them@a_horse_with_no_name是的,我知道Date的后期修正主义,Codd的原始规则不允许重复字段,在他的原始演示中,他明确使用了术语“数组”举个例子。我知道他对此唯一的一个例外是,它对DBMS来说是“不透明的”(换句话说,只要DBMS不知道并且不能解包,列可以包含任何内容)你提到的其他想法是不好的。我知道,我只在他真的需要一个表的情况下提到它