需要SQL数据库设计建议

时间:2013-05-28 16:00:35

标签: sql database database-design

我的数据库:

CREATE DATABASE `cars` /*!40100 DEFAULT CHARACTER SET latin1 */;

DROP TABLE IF EXISTS `cars`.`employees`;
CREATE TABLE  `cars`.`employees` (
  `emp_id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(40) DEFAULT NULL,
  `last_name` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `cars`.`products`;
CREATE TABLE  `cars`.`products` (
  `prod_id` int(11) NOT NULL AUTO_INCREMENT,
  `prod_name` varchar(40) DEFAULT NULL,
  `prod_price` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`prod_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这是我的数据库查询。我有创建CARS数据库的任务,其中包含有关员工和汽车的信息,数据库也必须包含有关销售哪辆车以及哪些工人出售它的信息。

我的问题:我如何存储销售,以便记录哪个员工销售了哪些车。

3 个答案:

答案 0 :(得分:4)

可能会创建一张桌子来举行哪些员工出售哪些车?

EmployeeSales
---------------
emp_id
prod_id
OtherInfo

答案 1 :(得分:1)

这是一个超越1NF方向的设计决策,在开发之前,您(或您组织的其他人)必须考虑到这一点。为了回答您的具体问题,这是典型的情况,需要使用XRef表将所有客户 - 车辆关联以及与销售商相关的额外详细信息组合在一起。 即:

Sale table: 
-----------------------------
sale_id autonumeric(1,1) PK
, emp_id int FK
, prod_id int FK
, price decimal(10,2)
, sold_date datetime(2)
, other_interesting_sale_details

这是一种可能的解决方案,可以保留特定员工销售的汽车的历史信息以及特定企业可能感兴趣的其他详细信息。

我希望它有所帮助。

答案 2 :(得分:0)

取决于你想要的扩张程度......你有一个产品表......这是否适用于你的汽车,每辆车都会直接添加到这个?如果是这样,那么你可以直接使用两个字段

在products表中,添加一列“SoldBy”作为整数。这可以是员工表员工ID的链接。

如果该值已填充,则已售出,如果已售出,则是销售该值的员工。