如何在sql数据库中的单个字段中存储多个值

时间:2014-07-21 12:39:00

标签: sql

我的问题是,我想在数据库中存储一个有多个电话号码的人。 对于数字的单个变量,每个只存储一个数字。现在,如果我想添加另一个电话号码,它将创建另一个具有相同细节但数量不同的新记录。我想一起显示所有这些数字。有人可以帮忙吗?

7 个答案:

答案 0 :(得分:16)

您应该为Person和PhoneNumber创建单独的表。

CREATE TABLE Person(PersonId int IDENTITY(1,1) PRIMARY KEY)

CREATE TABLE Phone(
    PersonId int,
    PhoneNumber varchar(20),
    CONSTRAINT PK_Phone PRIMARY KEY(PersonId,PhoneNumber),
    CONSTRAINT FK_PersonId FOREIGN KEY(PersonId) REFERENCES Person(PersonId)
    )

答案 1 :(得分:10)

您可以使用第二个表来存储数字,然后使用外键链接:

PersonTable: PersonId, Name, etc..

第二张表将保留数字......

NumbersTable: NumberId, PersonId(fk), Number

然后你可以得到这样的数字......

SELECT p.Name, n.Number from PersonTable p Left Join NumbersTable n
on p.PersonId = n.PersonId

这是一个简单的例子。我在这里使用LEFT JOIN以防一个人不提供他们的号码。此外,这只是伪代码,因此请勿在名称中使用 Table

答案 2 :(得分:1)

就 PostgreSQL 而言,您可以使用 xml 类型来存储 XML 数据,该类型可以存储格式良好的“文档”。此网址可能会有所帮助:

https://www.postgresql.org/docs/9.1/datatype-xml.html

答案 3 :(得分:0)

您可以将多个数据存储为分隔符分隔值。使用管道(|)或倾斜(〜)作为分隔符。当我们插入新值或更新现有值时,请检查电话号码是否已存在。如果电话号码栏中已存在一些数据,只需在其中添加分隔符+新电话号码。

答案 4 :(得分:0)

最好的方法是:

  1. 序列化你的手机。没有阵列,
  2. 存储在您的表中,
  3. 当你想获得phone.no。
  4. 时反序列化

答案 5 :(得分:0)

这不是最佳方法,因为您的数据库将变得模棱两可,并且将无法保持规范化。很简单,您必须创建另一列,并且在此第一列的主键充当外键。然后只需使用联接即可。As mentioned below

答案 6 :(得分:-1)

你可以添加逗号分隔。如果您正在进行网络应用,您可以将手机专栏设为字符串并对其进行json编码,然后您就可以支持无数的电话号码:)