[英]SQL Primary Key for 2 tables
我的預訂系統中有兩個表(“公司”和“人”),(這些是我的“客戶類型”)。
公司表
-CompanyID
**-CompanyName**
-Fname
-Lname
-Street
-City
-ContactNo
人桌
-PersonID
-Fname
-Lname
-Street
-City
-ContactNo
他們唯一的區別是COMPANYNAME。
然后,每筆交易可以是COMPANY或PERSON。
預訂表
-ReservationNo
-ClientID
如何為ClientID插入值?
您可以在預訂表中再添加一列,以指定客戶類型(公司/人員)。 然后,ClienID可以是PersonID / CompanyID。 進行聯接以查找clientID是對應於個人還是公司不是一個好的設計
您應該將“ COMPANY TABLE”和“ PERSONS TABLE”合並到“ CLIENTS TABLE” :)
-ClientID
-Fname
-Lname
-Street
-City
-ContactNo
並使用創建“ COMPANY TABLE”
-CompanyID
**-CompanyName**
-ClientID
並創建“ PERSONS TABLE”
-PersonID
-ClientID
要么
您將像這樣的NULL值合並“ COMPANY TABLE”和“ PERSONS TABLE”到“ CLIENTS TABLE”
-ClientID
-PersonID (can be NULL)
-CompanyID (can be NULL)
**-CompanyName** (can be NULL or empty)
-Fname
-Lname
-Street
-City
-ContactNo
如果您不需要從PersonID / CompanyID進行映射以實現與其他表的向后兼容性,則應刪除PersonID / CompanyID列(對於我提到的第一種情況,應刪除整個“ PERSONS TABLE”)。 之后,您可以使用“ CompanyName NOT IS NULL”標識公司行。
如果您不想合並表,請考慮“ Damien_The_Unbeliever”的答案。
但是我認為您絕對應該合並這兩個“人員表”。
如果這兩種可能性永遠不會改變,那么擁有一對可為空的列(帶有適當的外鍵)可能就足夠了:
CREATE TABLE Reservations (
ReservationNo int not null,
PersonID int null,
CompanyID int null,
/* Other columns */
constraint CK_Reservations_PersonOrCompany CHECK
((CompanyID is null or PersonID is null) and COALESCE(CompanyID,PersonID) is not null),
/* Other constraints */
)
如果可能會有更多的客戶,請引入一個客戶表:
CREATE TABLE Clients (
ClientID int not null,
ClientType varchar(10) not null,
/* Common columns for all client types */
constraint PK_Clients PRIMARY KEY (ClientID),
constraint UQ_Client_TypeCheck UNIQUE (ClientID,ClientType),
constraint CK_Client_ClientTypes CHECK
(ClientType in ('PERSON','COMPANY')) --Add more types later
/* Other constraints */
)
然后,在每個客戶端類型表中,強制使用正確的客戶端類型:
CREATE TABLE Persons (
ClientID int not null,
ClientType as CONVERT(varchar(10),'PERSON'),
/* Columns unique to person client types */
constraint PK_Persons PRIMARY KEY (ClientID),
constraint FK_Persons_Clients FOREIGN KEY (ClientID) references Clients,
constraint FK_Person_ClientTypeCheck FOREIGN KEY (ClientID,ClientType)
references Clients (ClientID,ClientType)
/* Other constraints */
)
並根據需要重復其他表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.