繁体   English   中英

1对1关系是否适合这种情况?

[英]Is a 1-to-1 relationship appropriate for this scenario?

我想知道一对一的关系是否适合以下情况:

我有一个由两列ID和TrackingNumber组成的查找表,该表维护一个跟踪号(用于转发的电话号码)的列表。 我们还有一个现有表,其中包含客户的电话号码。

我们有时会通过将某些电话号码链接到跟踪号码来跟踪它们。 发生这种情况时,将确定跟踪的开始日期和结束日期。 结束日期过后,我们希望该行保留在表格中,但将其标记为无效。 这样做的原因是,如果该客户将来需要再次进行跟踪,我们将尽可能重复使用相同的跟踪号。

首先,将填充TrackingNumber表,但不会填充RefTrackingNumber表。 将来我们可能还会在TrackingNumber表中添加更多条目。 我意识到一个选择就是只拥有一个表,但这首先需要删除NOT NULL约束。

我可以想到的最佳解决方案是此帖子的以下示例: 在SQL Server中定义一对一关系

有没有更好的办法?

谢谢。

CREATE TABLE TrackingNumber (
    ID int PRIMARY KEY,
    TrackingNumber varchar(20)
)


CREATE TABLE RefTrackingNumber (
    ID int PRIMARY KEY,
    RefPhoneNumber int NOT NULL,
    StartDate datetime NOT NULL,
    EndDate datetime NOT NULL,
    Active bit NOT NULL
)

ALTER TABLE RefTrackingNumber
    ADD FOREIGN KEY (ID) REFERENCES TrackingNumber(ID)

从数据库的角度来看,这是1:M的关系。 您使记录无效的逻辑对RDBMS没有意义。 除非您当然计划将它们移动到历史记录表,但从StartDateEndDate判断,您将不会如此。

您可能需要为RefTrackingNumber创建代理键,然后将RefTrackingNumberID字段RefTrackingNumberTrackingNumberID 它看起来像这样:

CREATE TABLE TrackingNumber (
    ID int PRIMARY KEY,
    TrackingNumber varchar(20)
)


CREATE TABLE RefTrackingNumber (
    ID int IDENTITY(1, 1) PRIMARY KEY,
    TrackingNumberID int NOT NULL,
    RefPhoneNumber int NOT NULL,
    StartDate datetime NOT NULL,
    EndDate datetime NOT NULL,
    Active bit NOT NULL
)

ALTER TABLE RefTrackingNumber
    ADD FOREIGN KEY (TrackingNumberID) REFERENCES TrackingNumber(ID)

您可以创建一个VIEW以使用当前参考编号:

CREATE VIEW CurrentRefTrackingNumber AS
SELECT ID, TrackingNumberID, RefPhoneNumber
FROM RefTrackingNumber
WHERE GETDATE() BETWEEN StartDate AND EndDate
  AND Active = 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM