MySQL主键声明

3

我需要创建一个计数表,其中计数是通过从booksavailable和newarrivals中获取售价,从出版商获取成本价并将两者相减得到的利润/亏损表生成的。

如何使用上述键的语法声明计数表?这个表的主键应该是什么?该表需要显示相应的书籍ID即bid以及从该书带来的利润/亏损。

所使用的代码:

CREATE TABLE BOOKSAVAILABLE( 
BID VARCHAR(5) PRIMARY KEY, 
        TITLE    VARCHAR(50),
        AUTHOR    VARCHAR(40), 
        CATEGORY VARCHAR(40), 
        PRICE VARCHAR(10),
        AVAILABLE VARCHAR(5)
);

CREATE TABLE NEWARRIVALS(
        BID VARCHAR(5) PRIMARY KEY, 
        TITLE VARCHAR(50), 
        AUTHOR VARCHAR(40), 
        CATEGORY VARCHAR(40),
        PRICE VARCHAR(10), 
        AVAILABLE VARCHAR(10)
);

CREATE TABLE PUBLISHER( 
        PID VARCHAR(5), 
        BID VARCHAR(5),
        PRIMARY KEY(PID,BID), 
        NAME VARCHAR(40), 
        CONTACT VARCHAR(10),
        UNITS VARCHAR(40), 
        SOLDAT VARCHAR(10)
);

新到货了吗?还是它们还未到达? - Chris Wesseling
主键应该是书籍ID。 - Ja͢ck
新到货已经可用。 - user1862100
2个回答

0
CREATE TABLE TALLY( 
ID int PRIMARY KEY,
BID VARCHAR(5) , 
PRICE_PROFIT_LOSS INT)

无论如何,在您的所有表格中,价格的所有属性都是varchar(),而它们应该是int或bigint。

此外,将BID、PID声明为int而不是varchar()会更好。实际上,由于它基本上是一个计算过程,所以不需要台账表。但是,如果您需要一个,则结构可以像上面那样。台账表的主键实际上只是自动生成的ID。


0

我相信如果你正在进行一些编程,比如PHP,你可能会将你的MySql设计简化。特别是计算库存和利润是一个非常简单的任务。此外,您可以使用联合表来处理出版商,为什么呢?因为在当前设计中,您最终会为出版商拥有冗余数据。由于一个出版商可以有很多书籍,所以没有必要为每本书的每个出版商字段存储出版商名称、地址等信息。我建议在booksavailable中添加一个日期列,这样您就可以轻松区分新到货的书籍和可用的书籍。这将删除newarrivals表,因为它与booksavailable非常相似,所以是多余的。

此外,您可以添加一个名为ORDER的表,将您的购买放入其中,通过从实际书籍价格中减去您售出的书籍数量,您可以计算出您的损失/利润。此外,如果您在mysql中使用InnoDB引擎,它可以定义外键,那么就不需要为每个表的主键使用不同的名称,它们都可以命名为ID。我建议采用以下设计:

mysql workbench diagram


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接