Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
我的MySQL设计是否违反了数据库规则?_Mysql_Mysql Management - Fatal编程技术网

我的MySQL设计是否违反了数据库规则?

我的MySQL设计是否违反了数据库规则?,mysql,mysql-management,Mysql,Mysql Management,我需要一个建议,如果我在MySQL数据库做正确的事情。我正在将这个名为inventory的数据库连接到一个java应用程序,它由一个名为item的表组成,下面是详细信息: id-int(11),自动递增 项目名称-varchar(50) 类别-varchar(25) q_框-int(11) 单价箱双倍 子项总计框-双倍 q_pc-int(11) 单价/pc双倍 小计总pc双倍 总计双倍 最近购买日期-日期 上次修改日期-时间戳 在库存应用程序的开发中,我已经在使用它来存储库存,但是我现在想做的是

我需要一个建议,如果我在MySQL数据库做正确的事情。我正在将这个名为inventory的数据库连接到一个java应用程序,它由一个名为item的表组成,下面是详细信息:

  • id-int(11),自动递增
  • 项目名称-varchar(50)
  • 类别-varchar(25)
  • q_框-int(11)
  • 单价箱双倍
  • 子项总计框-双倍
  • q_pc-int(11)
  • 单价/pc双倍
  • 小计总pc双倍
  • 总计双倍
  • 最近购买日期-日期
  • 上次修改日期-时间戳
  • 在库存应用程序的开发中,我已经在使用它来存储库存,但是我现在想做的是添加一个表来存储来自客户的订单

    我计划这样做:

    表名:订单

    id int(11), AUTO_INCREMENT
    customerid int(11)
    orderdate datetime
    PRIMARY KEY (id)
    FOREIGN KEY (customerid) REFERENCES Customers(Id)
    
    orderid int(11),
    itemid int(11)
    FOREIGN KEY (orderid) REFERENCES Orders(id)
    FOREIGN KEY (itemid) REFERENCES Items(Id)
    
    其中包括以下内容:

  • 订单id-int(11),自动递增
  • 项目名称-varchar(50)
  • 类别-varchar(25)
  • q_框-int(11)
  • 每箱单价-双倍//这是每箱的零售/批发价格
  • 子项总计框-双倍
  • q_pc-int(11)
  • 单价\u pc-双倍//这是每台pc的零售/批发价格
  • 小计总pc双倍
  • 总计双倍
  • 客户名称-varchar(50)
  • 上次修改日期-时间戳

    我的问题是:由于我使用的是同一个变量,我是否违反了任何MySQL规则

  • 或者你有什么建议吗?如有任何建议,将不胜感激


    提前感谢:)

    您的设计可能需要一些规范化,您有大量重复的数据,这与关系数据库(如MySQL)的整体理念背道而驰


    在订单表中,您可以拥有客户Id并生成外键。 作为客户,在您为他/她创建订单之前,他/她应该在场

    不,如果使用相同的变量,就不会违反MYSQL的规则


    编写联接时,需要使用别名来识别,不要混淆

    您最好使用项目表,以及订单订单项目

    订单

    id int(11), AUTO_INCREMENT
    customerid int(11)
    orderdate datetime
    PRIMARY KEY (id)
    FOREIGN KEY (customerid) REFERENCES Customers(Id)
    
    orderid int(11),
    itemid int(11)
    FOREIGN KEY (orderid) REFERENCES Orders(id)
    FOREIGN KEY (itemid) REFERENCES Items(Id)
    
    订购商品

    id int(11), AUTO_INCREMENT
    customerid int(11)
    orderdate datetime
    PRIMARY KEY (id)
    FOREIGN KEY (customerid) REFERENCES Customers(Id)
    
    orderid int(11),
    itemid int(11)
    FOREIGN KEY (orderid) REFERENCES Orders(id)
    FOREIGN KEY (itemid) REFERENCES Items(Id)
    

    这样就减少了重复数据。

    值得注意的是,严格来说,您的设计没有违反任何MySQL规则,甚至没有违反数据库规则。您不必规范化数据。然而,为了避免异常,在数据优化方面,您应该重新设计您的模式。