联系人可以拥有一个或多个电话号码。需要一种方法将其中一个设置为"主要"电话号码。
建模的最佳方法是什么?
我通常看到的方法是简单地添加一个名为" is_primary"的字段。到手机然而,为了使其工作,当一个记录的该字段设置为true时,则需要将所有其他相关电话号码设置为false。
有没有办法通过关系对其进行建模,因此只需要更新一位数据?
这似乎可以通过名为PrimaryPhone的链接表来完成 ContactId和PhoneId。如果ContactId / PhoneId存在链接,则会在UI中使用它来显示它是主要链接。如果主要更改,则只需更改一条记录即可。
或者是否应该采取其他方式?
答案 0 :(得分:1)
假设你有两个表(Contacts和PhoneNumbers),这很简单。您在ContactsPhoneNumberID的Contacts中有一列,它包含PhoneNumber的ID。这可确保您在任何一个时间点都不会有超过1个标记为主要内容。
答案 1 :(得分:0)
我可能会像我一样:
CREATE TABLE Contact
(ContactID int NOT NULL PRIMARY KEY
,CreateDate datetime
)
GO
CREATE TABLE Phone
(PhoneID int identity (1,1) PRIMARY KEY
,ContactID int not null
,[Key] varchar(20) not null
,[Value] varchar(20) not null
,[Status] varchar(20) not null
)
GO
ALTER TABLE Phone
ADD CONSTRAINT FK_cnst FOREIGN KEY (ContactID)
REFERENCES Contact (ContactID)
GO
ALTER TABLE phone ADD CONSTRAINT UX_Constraint UNIQUE (ContactID, [Status])
GO
INSERT contact SELECT 1, GETDATE()
INSERT INTO phone (ContactID, [Key], Value, Status) VALUES (1, 'Office', '455-1212', 'Alternate')
INSERT INTO phone (ContactID, [Key], Value, Status) VALUES (1, 'Home', '555-1212', 'Alternate2')
INSERT INTO phone (ContactID, [Key], Value, Status) VALUES (1, 'Cell', '555-1000', 'Primary')
INSERT INTO phone (ContactID, [Key], Value, Status) VALUES (1, 'Cell', '555-1001', 'MistressHotline')
GO
SELECT *
FROM Phone
GO
DROP TABLE phone, Contact
然后当然要查询它是否会有效。
由于