我的问题是,我想在数据库中存储一个有多个电话号码的人。 对于数字的单个变量,每个只存储一个数字。现在,如果我想添加另一个电话号码,它将创建另一个具有相同细节但数量不同的新记录。我想一起显示所有这些数字。有人可以帮忙吗?
答案 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 数据,该类型可以存储格式良好的“文档”。此网址可能会有所帮助:
答案 3 :(得分:0)
您可以将多个数据存储为分隔符分隔值。使用管道(|)或倾斜(〜)作为分隔符。当我们插入新值或更新现有值时,请检查电话号码是否已存在。如果电话号码栏中已存在一些数据,只需在其中添加分隔符+新电话号码。
答案 4 :(得分:0)
最好的方法是:
答案 5 :(得分:0)
这不是最佳方法,因为您的数据库将变得模棱两可,并且将无法保持规范化。很简单,您必须创建另一列,并且在此第一列的主键充当外键。然后只需使用联接即可。As mentioned below
答案 6 :(得分:-1)
你可以添加逗号分隔。如果您正在进行网络应用,您可以将手机专栏设为字符串并对其进行json编码,然后您就可以支持无数的电话号码:)