Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在RDB中设计一个表,以显示多个项目的销售额,并计算销售额_Sql_Sql Server_Tsql_Database Design_Ddl - Fatal编程技术网

Sql 在RDB中设计一个表,以显示多个项目的销售额,并计算销售额

Sql 在RDB中设计一个表,以显示多个项目的销售额,并计算销售额,sql,sql-server,tsql,database-design,ddl,Sql,Sql Server,Tsql,Database Design,Ddl,我正在为一个模拟应用程序设计一个数据库,我在概念化“销售”表的设计时遇到了问题 如果我有一个 ID为主键、名称和lname的出纳表 商品ID为主键、描述、价格、库存的商品表 带有销售标识(主键)、物品标识(FK物品)、出纳标识(FK代表出纳标识)、销售总价、单位价格(FK到物品价格)和售出单位的销售表 我如何设计销售,使几件商品可以在一次交易中销售? 规范化规则反对一个列包含多个值,因此我不知道如何将在一个数组中的事务中出售的所有article_id存储起来。计算价格似乎也有问题 我知道在DML

我正在为一个模拟应用程序设计一个数据库,我在概念化“销售”表的设计时遇到了问题

如果我有一个 ID为主键、名称和lname的出纳表

商品ID为主键、描述、价格、库存的商品表

带有销售标识(主键)、物品标识(FK物品)、出纳标识(FK代表出纳标识)、销售总价、单位价格(FK到物品价格)和售出单位的销售表

我如何设计销售,使几件商品可以在一次交易中销售? 规范化规则反对一个列包含多个值,因此我不知道如何将在一个数组中的事务中出售的所有article_id存储起来。计算价格似乎也有问题

我知道在DML中,可以多次显示PK,但据我所知,在DDL中,不能插入重复PK的行,所以我不知道如何实现类似的效果

SALE_ID | ARTICLE_ID | CASHIER_ID | TOTAL_PRICE_OF_SALE | PRICE_OF_UNIT | UNITS_SOLD
   1         1ASB       JOHNDOE1       50.00                  25.00              1
   1         351A       JOHNDOE1       50.00                  10.00              1
   1         JS57       JOHNDOE1       50.00                  15.00              1
在DDL中。
请注意,在插入期间,销售的总价也应该自己计算它的价值,但我也不知道如何处理销售的单价乘以销售的单价,然后将所有价格加总成销售的总价。

您需要一个
销售项目
表将
文章
链接到
销售

CREATE TABLE SALE_ITEM (
    SALE_ITEM_ID INT NOT NULL IDENTITY(1,1),
    SALE_ID INT NOT NULL REFERENCES SALE(SALE_ID),
    ARTICLE_ID INT NOT NULL REFERENCES ARTICLE(ARTICLE_ID),
    QUANTITY INT,
    -- Its usually safer to copy the price into the 'item' table
    -- so that your order history is accurate even when
    -- the price of the article increases
    PRICE DECIMAL(9,2)
)
并从
销售中删除
商品ID
。或者您可能更愿意称之为
SALE\u ARTICLE

顺便说一句,在命名表时,我建议选择使用复数或单数表名。。。但不要使用混音,因为那样会让人困惑。因此,我在本例中使用了
SALE

此外,我不会在表名中使用所有大写字母,而是使用Pascal大小写,例如
SaleItem

另外,除非您有具体要求,否则不要存储销售总价。当您需要它时,查询它要简单得多,否则您通常需要在
SALE\u ITEM
上添加触发器。查询方法的一个示例:

SELECT SUM(SI.Price*SI.Quantity) TotalPrice
FROM SALE S
INNER JOIN SALE_ITEM SI on SI.SALE_ID = S.SALE_ID;

注意:
SALE\u ITEM
技术上不需要
SALE\u ITEM\u ID
列,因为您可以使用
SALE\u ID,ARTICLE\u ID
的复合键,但我更喜欢始终具有特定于表的PK。

salesItem和ARTICLE表之间的区别是什么?因此我猜这也意味着salesItem不会有PK?或者更确切地说,不应该需要