两个表的SQL主键
我在我的预定系统中有两个表(公司和人员)(这些是我拥有的TYPES OF CLIENT)。两个表的SQL主键
运营商表
-CompanyID
**-CompanyName**
-Fname
-Lname
-Street
-City
-ContactNo
个人表
-PersonID
-Fname
-Lname
-Street
-City
-ContactNo
他们唯一的区别是公司名称。
然后每笔交易可以是一个公司或个人..
保留表
-ReservationNo
-ClientID
我如何可以插入客户端ID值?
您可以在指定客户类型(公司/人)的预订表中添加一列。 然后ClienID可以是PersonID/CompanyID。做一个加入寻找一个clientId是否对应于人物或公司是不是一个很好的设计
感谢您的回答!你的答案和其他论坛一样,我会考虑的!谢谢! :) – TheOxblood
你应该合并“运营商表”和“个人表”,以“客户表” :)
-ClientID
-Fname
-Lname
-Street
-City
-ContactNo
,并创建“运营商表” 与
-CompanyID
**-CompanyName**
-ClientID
,打造 “个人表” 与
-PersonID
-ClientID
OR
你合并“运营商表”和“个人表”,以“客户表”与NULL值这样
-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”的答案。
但我想你应该将这两个“人物表”合并。
为什么要在公司和个人表中引入更多的'ID'? “ClientID”确实足以识别它们。 –
你是对的,这是令人生气的。我想到系统中的其他表已经在使用PersonID和CompanyID。我会纠正我的答案,以清理事情...... – b2ag
也许我会为预订表创建另一列,以便为每项交易识别客户(公司或个人)。 – TheOxblood
如果这两种可能性都可能永远不会改变,那么有一对空列的(有适当的外键)可能就够了:
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 */
)
并根据需要重复其他表格。
我感谢您的回答!谢谢! :) – TheOxblood
你是什么意思为ClientID插入一个值? ClientID是您错过的公司/人员表中的一个字段吗? –