【问题标题】:MySQL Primary Key declarationMySQL主键声明
【发布时间】:2012-11-29 05:18:11
【问题描述】:

我必须创建一个理货表,其中理货是通过从 bookavailable 和 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)
);

【问题讨论】:

  • 有新品上市吗?还是他们还没到?
  • 主键应该是book id。
  • 新品上架

标签: mysql reference foreign-keys primary-key


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    CREATE TABLE TALLY( 
    ID int PRIMARY KEY,
    BID VARCHAR(5) , 
    PRICE_PROFIT_LOSS INT)
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 2011-06-28
      相关资源
      最近更新 更多