MySQL主键声明

时间:2012-11-29 05:18:11

标签: mysql reference foreign-keys primary-key

我必须创建一个计数表,通过获取booksavailable和newarrivals的售价,发布者的成本价格以及减去两者来获得盈利/亏损表来生成统计数据。

如何使用引用上述键的语法声明计数表? 该表的主键应该是什么? 该表需要显示相应的bookid,即出价和该书带来的利润/亏损。

使用的代码:

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)
);

2 个答案:

答案 0 :(得分:0)

我相信如果你正在做一些编程,即。 PHP,您可以将MySql设计更改为更简单的设计。特别是,计算库存和利润是一项非常简单的任务。你也可以为出版商使用联合表,为什么?因为,根据当前的设计,您最终会为发布者提供冗余数据。由于一个发布者可以拥有多本图书,因此无需在每本图书的每个发布商字段中存储发布商名称,地址。我建议在booksavailable中添加一个日期列,这样您就可以简单地将新对象与可用书籍区分开来。这将删除newARrivals表,该表与booksavailable非常相同且非常冗余。

此外,您可以添加一个名为ORDER的表格来购买,购买从您可能计算的损失/利润的实际账面价格减去您销售图书的金额。此外,如果您在mysql中使用InnoDB引擎,这使您能够定义外键,则无需使用不同的名称调用每个表主键,它们都可以命名为ID。我推荐以下设计:

mysql workbench diagram

答案 1 :(得分:0)

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

无论如何在所有你的表中,价格的所有属性都是varchar(),而他们不是int或bigint ..

也很好地将BID,PID声明为int而不是varchar(),并且实际上不需要计数表,因为它基本上是一个计算..但如果你需要一个,那么结构cud就像上面那样。 。计数表的PK实际上只是一个自动生成的ID ..