如何在单个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. 但我

我有这些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.
但我不认为这是我能做的最好的方式

这是否可以将某种数组保存为“日期”属性

*(包含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不知道并且不能解包,列可以包含任何内容)你提到的其他想法是不好的。我知道,我只在他真的需要一个表的情况下提到它