如何在SQL表中存储数组?

时间:2016-01-22 09:03:31

标签: sql postgresql

我知道您可以在SQL中使用外键“引用”另一个表,这将在表1中的该条目(FK)与表2中的主键之间建立连接。

我想扩展这个概念,以便有n'表2。

我手头的任务是表1表示任务列表,表2是任务本身,我想为每个任务列表存储n个这样的任务。

我特意使用postgres,但我想知道vanilla SQL中的答案(这样更容易理解)。

2 个答案:

答案 0 :(得分:3)

  

我想扩展这个概念,以便有n'表2'

     

我手头的任务是表1表示任务列表,和   表2是任务本身,我想为每个任务存储n个这样的任务   任务列表。

反过来想想。

每个task(table2)必须具有表1中相应PK的FK。并且可能有许多任务引用表1中的相同PK(基本上是你的"任务列表&# 34;然后)。

这是1:N关系。而FK应该设计在" N-side"而不是在" 1-Side"关系。

答案 1 :(得分:0)

关系数据库基于关系。所以,让我们先创建表格。

TaskList
--------
TaskList ID
Task ID
Task Number
Task Priority
Start Time Stamp
End Time Stamp
...

TaskList ID是主键。任务ID是Task表的外键。任务编号是用户分配给任务的编号。任务优先级是用户分配给任务的优先级。

我们有2个表,因此我们可以在TaskList表中按时间顺序分隔任务。当你重复任务时,我们也会节省一点空间。

Task
----
Task ID
Task Description
...

在Java中,我们没有关系。我们有对象。因此,为任务创建Java对象很好。

package com.ggl.testing;

import java.util.Calendar;

public class Task {

    private int taskNumber;
    private int taskPriority;

    private Calendar startTimestamp;
    private Calendar finishTimestamp;

    private String description;

    public int getTaskNumber() {
        return taskNumber;
    }

    public void setTaskNumber(int taskNumber) {
        this.taskNumber = taskNumber;
    }

    public int getTaskPriority() {
        return taskPriority;
    }

    public void setTaskPriority(int taskPriority) {
        this.taskPriority = taskPriority;
    }

    public Calendar getStartTimestamp() {
        return startTimestamp;
    }

    public void setStartTimestamp(Calendar startTimestamp) {
        this.startTimestamp = startTimestamp;
    }

    public Calendar getFinishTimestamp() {
        return finishTimestamp;
    }

    public void setFinishTimestamp(Calendar finishTimestamp) {
        this.finishTimestamp = finishTimestamp;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

如您所见,您必须阅读TaskList表和Task表以创建Task对象。当用户创建新的Task对象时,您必须在TaskList表和Task Table中写入一行。

您在加入TaskList和Task表时创建一个Task实例列表,并选择多行。