如何创建可以获取元素列表的列?

时间:2018-03-23 12:03:30

标签: sql oracle

所以我有一个包含3列(id,city和country)的表,我正在尝试添加一个可以获取多个值的地址。这是一个行如何的示例:Id:1 ,城市:巴黎,国家:法国和我需要类似的东西Id:1,城市:巴黎,国家:法国,​​地址:Charonne,荣军院。我怎么能这样做?谢谢

2 个答案:

答案 0 :(得分:2)

使用另一张表:

CREATE TABLE location(
  id      NUMBER(10,0) CONSTRAINT location__id__pk PRIMARY KEY,
  city    VARCHAR2(100),
  country VARCHAR2(100)
);

CREATE TABLE location_addresses(
  id          NUMBER(10,0) CONSTRAINT location_addr__id__pk PRIMARY KEY,
  location_id NUMBER(10,0) CONSTRAINT location_addr__li__fk FOREIGN KEY
                             REFERENCES location( id ),
  address     VARCHAR2(100)
);

或者,使用嵌套表:

CREATE OR REPLACE TYPE StringList IS TABLE OF VARCHAR2(100);
/

CREATE TABLE location(
  id      NUMBER(10,0) CONSTRAINT location__id__pk PRIMARY KEY,
  city    VARCHAR2(100),
  country VARCHAR2(100),
  address StringList
) NESTED TABLE address STORE AS location_addresses;

注意:第一个选项允许您对表格应用约束 - 即您可以在UNIQUElocation_id上添加address约束以防止重复或{对NOT NULL的约束 - 但是,您无法轻易地将约束添加到嵌套表中。

答案 1 :(得分:1)

不要将其存储在同一个表中,而是创建另一个Address表。

表的结构可以是

ID ADDRESS

1 Charonne
1 Invalides

这有助于规范化表格。您可以通过在两个表之间使用连接来访问任何用户的地址。