5

SQL Server 2008 R2には、次のような3つのテーブルがあります。

DBモデル

会社には多くのLSPがある場合があります。LSPには多くのサービスがある場合があります。

また、SERVICE_CODEがCOMPANY内のSERVICEレコードを一意に識別することを確認する必要があります。つまり、COMPANY_ID + SERVICE_CODEは、システム全体でSERVICEレコードを一意に識別する必要があります。

例:COMPANY-Aには、同じSERVICE_CODEを持つ2つのサービス(2つの異なるSERVICE_IDを持つ)がない場合があります。ただし、COMPANY-AとCOMPANY-Bの両方に、SERVICE_CODE = "PREMIUM"の2つの別個のSERVICE(ここでも、SERVICE_IDが異なる)がある場合があります。

私はこのようなものが必要です:

alter table "SERVICE" 
add constraint "SERVICE_Index01" 
unique ("COMPANY_ID", "SERVICE_CODE") 

ただし、COMPANY_ID列がSERVICEテーブルにないため、(明らかに)これは失敗します。

助けてくれてありがとう。

4

3 に答える 3

5

インデックス付きビューを外部制約として使用できます。

CREATE VIEW dbo.CompanyServices
WITH SCHEMABINDING
AS
SELECT
  c.COMPANY_ID,
  s.SERVICE_CODE
FROM       dbo.COMPANY c
INNER JOIN dbo.LSP     l ON c.COMPANY_ID = l.COMPANY_ID
INNER JOIN dbo.SERVICE s ON l.LSP_ID     = s.LSP_ID
GO

CREATE UNIQUE CLUSTERED INDEX UQ_CompanyServices
ON dbo.CompanyServices (COMPANY_ID, SERVICE_CODE);

インデックスは、データに重複がないことを確認(COMPANY_ID, SERVICE_CODE)します。

于 2012-05-31T07:50:50.080 に答える
1

各企業は単一のLSPに制限されていますか?Service_Codeは一意ですか(または、Service_IDが異なる2つのサービスコード「PREMIUM」が存在する可能性があります)?

CREATE TABLE dbo.Company
(
  CompanyID INT PRIMARY KEY
  -- , ...
);

CREATE TABLE dbo.LSP
(
  LSPID      INT PRIMARY KEY, 
  CompanyID  INT FOREIGN KEY REFERENCES dbo.Company(CompanyID) -- UNIQUE?
  -- , ...
);

CREATE TABLE dbo.Service
(
  ServiceID    INT PRIMARY KEY
  -- , ...
);

CREATE TABLE dbo.LSP_Service
(
  LSPID        INT FOREIGN KEY REFERENCES dbo.LSP(LSPID), 
  ServiceID    INT FOREIGN KEY REFERENCES dbo.Service(ServiceID), 
  PRIMARY KEY (LSPID, ServiceID)
);
于 2012-05-31T03:56:53.243 に答える
-1

COMPANY_IDをサービステーブルに追加します。

Serviceテーブルの行をこのIDで一意にする必要がある場合は、このテーブルに外部キー参照を保持するのが理にかなっています。

于 2012-05-31T04:02:13.680 に答える