use*_*509 13 sql t-sql database sql-server normalization
CREATE TABLE SupplierQuote
(
supplierQuoteID int identity (3504,2) CONSTRAINT supquoteid_pk PRIMARY KEY,
PONumber int identity (9553,20) NOT NULL
.
.
.
CONSTRAINT ponumber_uq UNIQUE(PONumber)
);
Run Code Online (Sandbox Code Playgroud)
上面的ddl产生错误:
Msg 2744,Level 16,State 2,Line 1为表'SupplierQuote'指定的多个标识列.每个表只允许一个标识列.
我怎么解决呢?我希望PONumber能够自动增加.
如果在插入行时生成了SupplierQuoteId和PONumber,则将以锁步方式分配两个"标识"列(3504与9553一起,3506与9573一起,3508与9593一起,等等).如果这个假设是正确的,那么你可能会将PONumber设为计算列,如下所示:
CREATE TABLE SupplierQuote
(
supplierQuoteID int NOT NULL identity (3504,2) CONSTRAINT supquoteid_pk PRIMARY KEY,
PONumber AS (10 * supplierQuoteID - 25487)
.
.
.
);
Run Code Online (Sandbox Code Playgroud)
我使supplierQuoteId NOT NULL,这确保了PONumber也将是NOT NULL.同样,您不再需要PONumber上的唯一约束,因为它始终是唯一的.(如果需要一个性能,可以在计算列上构建索引.)
每个表不能有多个标识列.我认为你最好的选择是将PO数据拉入一个单独的表中,然后将两者与FK列相关联.
SupplierQuote
-------------
supplierQuoteID (PK/identity)
purchaseOrderID (FK to PurchaseOrder.purchaseOrderID)
otherColumn1
PurchaseOrder
-------------
purchaseOrderID (PK/identity)
otherColumn1
Run Code Online (Sandbox Code Playgroud)